Xslt 平面文件数据映射到同级节点
我有一个平面文件,每个记录都是一个客户,在该记录中有一个shipto和billto地址。输出架构有一个带有地址子节点的客户记录。我不知道如何将传入记录中的2个地址映射到客户记录的子节点 我有一个定义如下的输入文件:Xslt 平面文件数据映射到同级节点,xslt,biztalk,biztalk-mapper,Xslt,Biztalk,Biztalk Mapper,我有一个平面文件,每个记录都是一个客户,在该记录中有一个shipto和billto地址。输出架构有一个带有地址子节点的客户记录。我不知道如何将传入记录中的2个地址映射到客户记录的子节点 我有一个定义如下的输入文件: <customer> <customernum/> <shipaddrcity/> <shipaddrstate/> <shipaddrzip/> <billaddrcity/&
<customer>
<customernum/>
<shipaddrcity/>
<shipaddrstate/>
<shipaddrzip/>
<billaddrcity/>
<billaddrstate/>
<billaddrzip/>
</customer>
输出结果需要如下所示:
<customer>
<customernum/>
<addr>
<type/>
<city/>
<state/>
<zip/>
</addr>
<addr>
<type/>
<city/>
<state/>
<zip/>
</addr>
</customer>
我是biztalk的新手,无法找到任何合适的示例来说明如何使用biztalk映射器完成此操作。我还想听听如何使用xslt实现这一点 您可能需要特定于BizTalk的内容,而我对BizTalk一无所知,但这可能对您有所帮助 给定一个输入文档
<customers>
<customer>
<customernum>1</customernum>
<shipaddrcity>Cairns</shipaddrcity>
<shipaddrstate>QLD</shipaddrstate>
<shipaddrzip>b</shipaddrzip>
<billaddrcity>Sydney</billaddrcity>
<billaddrstate>NSW</billaddrstate>
<billaddrzip>c</billaddrzip>
</customer>
<customer>
<customernum>2</customernum>
<shipaddrcity>d</shipaddrcity>
<shipaddrstate>WA</shipaddrstate>
<shipaddrzip>e</shipaddrzip>
<billaddrcity>Melbourne</billaddrcity>
<billaddrstate>Vic</billaddrstate>
<billaddrzip>f</billaddrzip>
</customer>
</customers>
1.
凯恩斯
昆士兰
B
悉尼
新南威尔士州
C
2.
D
华盛顿州
E
墨尔本
维克
F
。。。此XSLT 1.0样式表
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="customer">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(
self::shipaddrstate|
self::shipaddrzip |
self::billaddrstate|
self::billaddrzip )]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="shipaddrcity">
<addr>
<type>ship</type>
<city><xsl:value-of select="." /></city>
<xsl:apply-templates select="../(shipaddrstate|shipaddrzip)" />
</addr>
</xsl:template>
<xsl:template match="billaddrcity">
<addr>
<type>bill</type>
<city><xsl:value-of select="." /></city>
<xsl:apply-templates select="../(billaddrstate|billaddrzip)" />
</addr>
</xsl:template>
<xsl:template match="shipaddrstate|billaddrstate">
<state><xsl:value-of select="." /></state>
</xsl:template>
<xsl:template match="shipaddrzip|billaddrzip">
<zip><xsl:value-of select="." /></zip>
</xsl:template>
</xsl:transform>
船
账单
。。。应用于输入文档时,将生成
<customers>
<customer>
<customernum>1</customernum>
<addr>
<type>ship</type>
<city>Cairns</city>
<state>QLD</state>
<zip>b</zip>
</addr>
<addr>
<type>bill</type>
<city>Sydney</city>
<state>NSW</state>
<zip>c</zip>
</addr>
</customer>
<customer>
<customernum>2</customernum>
<addr>
<type>ship</type>
<city>d</city>
<state>WA</state>
<zip>e</zip>
</addr>
<addr>
<type>bill</type>
<city>Melbourne</city>
<state>Vic</state>
<zip>f</zip>
</addr>
</customer>
</customers>
1.
船
凯恩斯
昆士兰
B
账单
悉尼
新南威尔士州
C
2.
船
D
华盛顿州
E
账单
墨尔本
维克
F
“*我也愿意听听如何使用xslt做到这一点。*”在xslt中做到这一点是微不足道的。花一个小时在网上学习教程,你就会知道怎么做。你尝试了什么,结果如何?这里是一个博客,展示了一个例子,谢谢Dijkgraaf。我一直想做的就是让桌子旋转。我的实际映射模式更复杂,但我只需要先获得一些简单模式的示例。在这一点上,我真的必须从简单开始,因为我对Biztalk的了解还不够,无法提出有用的问题。