如何在xsl变量中获取不同/唯一属性

时间:2011-12-16 16:32:39

标签: xslt

<xsl:variable name="Rows" select=" .. some stmt .." />
<xsl:for-each select="$Rows">
    <xsl:value-of select="@ATTRNAME"/>
</xsl:for-each>

想知道如何在[XSLT 1.0]中找到具有唯一/不同属性'ATTRNAME'的'行'。

2 个答案:

答案 0 :(得分:1)

使用xsl:key在XSLT 1.0中进行分组。以下内容仅打印根元素的唯一元素:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:key name="attrByVal" match="/*/@*" use="."/>
    <xsl:template match="/">
        <xsl:apply-templates select="/*/@*"/>
    </xsl:template>
    <xsl:template match="@*[generate-id()=generate-id(key('attrByVal', .)[1])]">
        <xsl:value-of select="concat(name(), ': ', ., '&#xA;')"/>
    </xsl:template>
    <xsl:template match="@*"/>
</xsl:stylesheet>

说明:首先,我们按值分组根元素的所有属性:

<xsl:key name="attrByVal" match="/*/@*" use="."/>

然后,创建一个模板,该模板仅匹配组中每个键的第一个元素:

<xsl:template match="@*[generate-id()=generate-id(key('attrByVal', .)[1])]">

忽略所有其他人:

<xsl:template match="@*"/>

示例输入:

<root one="apple" two="apple" three="orange" four="apple"/>

输出:

one: apple
three: orange

答案 1 :(得分:0)

XSLT 2.0解决方案:

<xsl:for-each-group select="$Rows" group-by="@ATTRNAME">
 <!-- Do something with the rows in the group. These rows
 can be accessed by the current-group() function. -->
    </xsl:for-each-group>