xslt将相同的多个源元素映射到单个目标元素

时间:2018-03-07 15:26:26

标签: xml xslt

需要xslt映射的帮助。 假设来源如下。

   <A>
   <B>
   <C>Test1</C>
   <D></D>
   </B>
   <B>
   <C>Test2</C>
   <D></D>
   </B>
   </A>

在元素B无界的情况下,让我的目标xsd如下所示。

 <X>
<Y></Y>
 </X>

我想在Y元素中映射C元素的所有值。

<X><Y>Test1,Test2</Y></X>

我如何实施,需要你的帮助 此致

1 个答案:

答案 0 :(得分:0)

您可以尝试基于您正在使用的XSLT版本的任何选项。

XSLT 1.0

在XSLT 1.0中,您需要遍历<C>元素并连接值和,分隔符。与XSLT 2.0相比,这个需要更多编码。

<xsl:template match="A">
    <X>
        <Y>
            <xsl:for-each select="B/C">
                <xsl:value-of select="." />
                <xsl:if test="position() != last()">
                    <xsl:value-of select="', '" />
                </xsl:if>
            </xsl:for-each>
        </Y>
    </X>
</xsl:template>

XSLT 2.0

在XSLT 2.0中,只要您使用Saxon viz等工厂,就可以使用经过优化的方法。在Java的情况下saxon9he.jar

<xsl:template match="A">
    <X>
        <Y>
            <xsl:value-of select="B/C" separator=", " />
        </Y>
    </X>
</xsl:template>

这两个模板都提供了所需的输出。

<X>
   <Y>Test1, Test2</Y>
</X>