3

Biztalk 2010を使用して、階層XMLファイルをフラットファイルスキーマに変換しようとしています。

正常に動作します。すべてのファイルがマップされます。しかし、階層は破壊されます。

私の入力xml構造は次のようになります。

<root>
    <node>
        <element1></element1>
        <element2></element2>
        <subnode1>
            <element1></element1>
            <element2></element2>
        </subnode1>
        <subnode2>
            <element1></element1>
            <element2></element2>
        </subnode2>
    </node>
</root>

フラットファイルスキーマは次のようになります。

<root>
    <node>
        <element1></element1>
        <element2></element2>
    </node>
    <subnode1>
        <element1></element1>
        <element2></element2>
    </subnode1>
    <subnode2>
        <element1></element1>
        <element2></element2>
    </subnode2>
</root>

私の入力は次のようになります:

<root>
    <node>
        <element1>Test1</element1>
        <element2>Test2</element2>
        <subnode1>
            <element1>Sub11</element1>
            <element2>Sub12</element2>
        </subnode1>
        <subnode2>
            <element1>Sub21</element1>
            <element2>Sub22</element2>
        </subnode2>
    </node>
    <node>
        <element1>Test3</element1>
        <element2>Test4</element2>
        <subnode1>
            <element1>Sub31</element1>
            <element2>Sub32</element2>
        </subnode1>
        <subnode2>
            <element1>Sub41</element1>
            <element2>Sub42</element2>
        </subnode2>
    </node>
</root>

私が出力として期待するのは:

Test1;Test2
Sub11;Sub12
Sub21;Sub22
Test3;Test4
Sub31;Sub32
Sub41;Sub42

しかし、私が得るものは次のとおりです。

Test1;Test2
Test3;Test4
Sub11;Sub12
Sub21;Sub22
Sub31;Sub32
Sub41;Sub42

Biztalkに階層を維持させる方法はありますか?

4

1 に答える 1

4

現在BizTalkMapperを持っていないので、Xsltソリューションしか提供できませんが、基本的にはnode、構造を保持するために要素を反復処理するためにマップが必要であることを示しています。

純粋なBizTalkマッピングを使用してこれを実現する場合は、次のXsltのようにnode、マップにループを作成させるソース要素を接続するために、フラット出力構造にグループ化ノードが必要です。for-each

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
    <xsl:output method="text" indent="no" />

    <xsl:template match="/">
        <xsl:for-each select="root/node">
            <xsl:value-of select="element1" />
            <xsl:text>;</xsl:text>
            <xsl:value-of select="element2" />
            <xsl:text>&#xA;</xsl:text>
            <xsl:value-of select="subnode1/element1" />
            <xsl:text>;</xsl:text>
            <xsl:value-of select="subnode1/element2" />
            <xsl:text>&#xA;</xsl:text>
            <xsl:value-of select="subnode2/element1" />
            <xsl:text>;</xsl:text>
            <xsl:value-of select="subnode2/element2" />
            <xsl:text>&#xA;</xsl:text>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

&#xA;出力スキーマのニーズに合わせて改行()を調整する必要がある場合があります。

于 2012-06-25T07:47:52.573 に答える