xslt - 组合与元素文本匹配的子元素

时间:2015-10-25 16:09:49

标签: xslt

我正在尝试提供一个XSLT转换模板,它可以组合与元素文本匹配的子元素(可以是任何东西)

示例输入XML

<test>
    <name>Alpha</name>
    <value>11</value>
</test>
<test>
    <name>Beta</name>
    <value>14</value>
</test>
<test>
    <name>Alpha</name>
    <value>22</value>
</test>

我希望转换将子元素与匹配元素组合在一起,因此任何名为Alpha的子元素都会在输出中分组。

示例结果XML

<test>
    <name>Alpha</name>
    <valuelist>11,22</valuelist>
</test>
<test>
    <name>Beta</name>
    <valuelist>14</valuelist>
<test>

name的文本值可以是任何值,因此无法在模板匹配中特别注明。

1 个答案:

答案 0 :(得分:0)

使用XSLT 2.0:

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

    <xsl:output indent="yes"/>

    <xsl:template match="root">
        <xsl:copy>
            <xsl:for-each-group select="test" group-by="name">
                <test>
                    <xsl:copy-of select="name"/>
                    <valuelist>
                        <xsl:value-of select="current-group()/value" separator=","/>
                    </valuelist>
                </test>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>

</xsl:transform>

http://xsltransform.net/ej9EGbV的在线示例。