Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建将分层XML转换为平面文件的Biztalk映射_Xml_Biztalk_Flat File_Biztalk 2010_Biztalk Mapper - Fatal编程技术网

如何创建将分层XML转换为平面文件的Biztalk映射

如何创建将分层XML转换为平面文件的Biztalk映射,xml,biztalk,flat-file,biztalk-2010,biztalk-mapper,Xml,Biztalk,Flat File,Biztalk 2010,Biztalk Mapper,我尝试使用Biztalk 2010将分层XML文件转换为平面文件模式 它很好用。每个文件都被映射。但是等级制度被摧毁了 我的输入xml结构如下所示: <root> <node> <element1></element1> <element2></element2> <subnode1> <element1></ele

我尝试使用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
Test3;Test4
Sub11;Sub12
Sub21;Sub22
Sub31;Sub32
Sub41;Sub42

有什么想法可以让Biztalk保持层次结构吗?

我手头没有Biztalk映射器,因此我只能提供Xslt解决方案,但基本上它会说明您需要映射在
节点上迭代以保留结构

如果要使用纯BizTalk映射实现这一点,您需要在平面输出结构中使用分组节点来连接源
节点
元素,该元素将强制映射为每个
循环创建
,如以下Xslt中所示:

<?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>

;

;
;

;
;

;

您可能需要根据您的输出模式需要调整换行符(
)。

+1-掌握XSLT将在除最琐碎的映射之外的所有映射中节省数小时的挫折和蜘蛛网。请参见此处,了解如何将现有映射转换为XSLT编辑XSLT似乎是最好的解决方案。谢谢。
<?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>