我尝试使用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保持层次结构?
答案 0 :(得分:4)
我现在手头没有BizTalk Mapper所以我只能提供Xslt解决方案,但基本上它会说明你需要你的地图迭代你的node
元素以保留结构。
如果要使用纯BizTalk映射实现此目的,则需要在平面输出结构中使用分组节点来连接源node
元素,这将强制地图创建for-each
循环,如以下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>
</xsl:text>
<xsl:value-of select="subnode1/element1" />
<xsl:text>;</xsl:text>
<xsl:value-of select="subnode1/element2" />
<xsl:text>
</xsl:text>
<xsl:value-of select="subnode2/element1" />
<xsl:text>;</xsl:text>
<xsl:value-of select="subnode2/element2" />
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
您可能需要根据输出架构需求调整换行符(

)。