如何创建将分层XML转换为平面文件的Biztalk映射
我尝试使用Biztalk 2010将分层XML文件转换为平面文件模式 它很好用。每个文件都被映射。但是等级制度被摧毁了 我的输入xml结构如下所示:如何创建将分层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
<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>
</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>
;
;
;
;
;
;
您可能需要根据您的输出模式需要调整换行符(
;
)。+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>
</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>