Xslt 从2个不同节点映射到重复的目标节点
我有这个来源和目标: 我需要我的地图会产生一个有两个T节点的目标 第一个是源内容,第二个是源内容 例如: 输入: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> <
<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,则需要添加一个过滤器以抑制不需要的过滤器。