<xsl:variable name="Rows" select=" .. some stmt .." />
<xsl:for-each select="$Rows">
<xsl:value-of select="@ATTRNAME"/>
</xsl:for-each>
想知道如何在[XSLT 1.0]中找到具有唯一/不同属性'ATTRNAME'的'行'。
答案 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(), ': ', ., '
')"/>
</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>