Xslt 从2个不同节点映射到重复的目标节点

Xslt 从2个不同节点映射到重复的目标节点,xslt,biztalk,biztalk-2010,Xslt,Biztalk,Biztalk 2010,我有这个来源和目标: 我需要我的地图会产生一个有两个T节点的目标 第一个是源内容,第二个是源内容 例如: 输入: <Root> <A> <FieldA>FA</FieldA> <FieldB>FB</FieldB> </A> <B> <FieldC>FC</FieldC> <FieldD>FD</FieldD> <

我有这个来源和目标:

我需要我的地图会产生一个有两个T节点的目标

第一个是源内容,第二个是源内容

例如:

输入:

<Root>
 <A>
   <FieldA>FA</FieldA>
   <FieldB>FB</FieldB>
 </A>
 <B>
   <FieldC>FC</FieldC>
   <FieldD>FD</FieldD>
 </B>
</Root>
请求的输出:

<Root>
    <T>
      <F1>FA</F1>
      <F2>FB</F1>
    </T>
    <T>
      <F1>FC</F1>
      <F2>FD</F2>
    </T>   
</Root>

***关于从B到T的映射也有一个条件,以下是您想要实现的:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

<xsl:output method="xml" indent="yes"/>

 <xsl:template match="/">
  <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="Root">
  <xsl:copy>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="A|B">
  <xsl:element name="T">
    <xsl:apply-templates/>
  </xsl:element>
 </xsl:template>

 <xsl:template match="*[parent::A or parent::B]">
  <xsl:choose>
     <xsl:when test="./name() = 'FieldA' or ./name() = 'FieldC'">
        <xsl:element name="F1">
           <xsl:value-of select="."/>
        </xsl:element>
     </xsl:when>
     <xsl:otherwise>
        <xsl:element name="F2">
           <xsl:value-of select="."/>
        </xsl:element>
     </xsl:otherwise>
  </xsl:choose>
 </xsl:template>

</xsl:stylesheet>
此外,请花时间报告您迄今为止所做的尝试。所以没有人做你的家庭作业。所以,在以后的问题中显示您的努力。

放置循环functoid

A --> Looping Functoid --> T
B --> Looping Functoid --> T

FieldA --> F1
FieldB --> F2
FieldC --> F1
FieldD --> F2

只需通过循环Functoid将A和B链接到T。

很好的解决方案,但我还有一个小问题。A是无界的,因此循环functoid会创建不必要的T节点。。我怎样才能克服它?@Ohadino你说的“不必要”是什么意思。此映射将为每个A和每个B创建T节点。因为A是无界的,所以它将创建3个节点而不是2个节点。2是好的,另一个是空的@Ohadino,这不是因为A是无界的。这里还发生了其他事情。尝试用鼠标右键验证映射->验证映射,您将看到生成的xsl.Great解决方案,但我还有一个小问题。A是无界的,因此循环functoid会创建不必要的T节点。。我怎么才能克服呢?你能再拿一个样品吗?T只会为每个A&B创建,因此如果不需要A,则需要添加一个过滤器以抑制不需要的过滤器。