2

受信メッセージを次の形式で分割しようとしています:

 <Items>
    <BatchID>123</BatchID>
    <Item>...</Item>
    <Item>...</Item>
    <Item>...</Item>
  </Items>

私は、Items スキーマを受け取り、Item スキーマを出力する XML 逆アセンブラーを備えたパイプラインを持っています。Items スキーマでは、Envelope プロパティが に設定されtrue、"Body XPath" プロパティが Items 要素を指しています。

ただし、ファイルを処理しようとすると、エラーが発生します: Finding the document specification by message type "BatchID" failed. Verify the schema deployed properly.、おそらく Item 要素のみが必要であり、BatchID 要素をどうするかがわからないためです。

BatchID を Items 要素の属性にすると (賢明な人ならそうするように)、すべて正常に機能します。残念ながら、私はレイアウトにこだわっています。

現時点では、BatchID の値は気にしません。

メッセージを分割するにはどうすればよいですか?

4

1 に答える 1

2

AFAIK Xml逆アセンブラは、指定された要素のすべての子ノードbody_xpathを常に抽出します-代わりにItemXpathを指定できるのは素晴らしい機能でした:(。

この制限は、次のいずれかで回避できます。

次のXSLTでうまくいくはずです。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0" xmlns:ns0="http://BizTalk_Server_Project3.Envelope">
    <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
    <xsl:template match="/">
        <xsl:apply-templates select="/ns0:Items" />
    </xsl:template>
    <xsl:template match="/ns0:Items">
        <ns0:Items>
            <!--i.e. Copy all Item elements and discard the Batch elements-->
            <xsl:copy-of select="ns0:Item"/>
        </ns0:Items>
    </xsl:template>
</xsl:stylesheet>

btmをビジュアルマップからxsltに変換する方法についてはこちらをご覧ください

于 2012-11-13T06:21:36.283 に答える