Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Xslt 平面文件数据映射到同级节点_Xslt_Biztalk_Biztalk Mapper - Fatal编程技术网

Xslt 平面文件数据映射到同级节点

Xslt 平面文件数据映射到同级节点,xslt,biztalk,biztalk-mapper,Xslt,Biztalk,Biztalk Mapper,我有一个平面文件,每个记录都是一个客户,在该记录中有一个shipto和billto地址。输出架构有一个带有地址子节点的客户记录。我不知道如何将传入记录中的2个地址映射到客户记录的子节点 我有一个定义如下的输入文件: <customer> <customernum/> <shipaddrcity/> <shipaddrstate/> <shipaddrzip/> <billaddrcity/&

我有一个平面文件,每个记录都是一个客户,在该记录中有一个shipto和billto地址。输出架构有一个带有地址子节点的客户记录。我不知道如何将传入记录中的2个地址映射到客户记录的子节点

我有一个定义如下的输入文件:

<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的了解还不够,无法提出有用的问题。