基于XSLT 2.0中的2个参数返回具有不同值的节点

时间:2012-03-01 06:26:24

标签: xslt-2.0

在XSLT 2.0中,我想获得具有2个参数的唯一节点..

例如我有:

    <items>
        <item x="1" y="1" z="a"/>
        <item x="1" y="2" z="b"/>
        <item x="2" y="1" z="c"/>
        <item x="1" y="2" z="d"/>
        <item x="2" y="2" z="e"/>
    </items>

我希望结果是:

    <items>
        <item x="1" y="1"/>
        <item x="1" y="2"/>
        <item x="2" y="1"/>
        <item x="2" y="2"/>
    </items>

有没有更简单的方法来获得这个? 我目前的代码实际上是多余的。

1 个答案:

答案 0 :(得分:2)

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

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

    <xsl:template match="/items">
        <xsl:copy>
            <xsl:for-each-group select="item" group-by="concat(@x,'#',@y)">
                <item x="{@x}" y="{@y}"/>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

修改:上下文是该组的第一项,因此不需要current-group()[1]。谢谢Michael Kay。