在XPath 2.0:
distinct-values(/*/*/*/name(.))
在XPath 1.0这可以用一个单一的XPath表达式来产生不。
使用XSLT 1.0:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select=
"/*/*/*[not(../following::*/*
[not(name() = name(current()))]
)
]">
<xsl:value-of select="concat(name(), ' ')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
当这个变换所提供的XML文档应用,有用结果产生:
size price rating year
一种更有效的XSLT 1.0转化,使用密钥:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kpchildByName"
match="product/*" use="name()"/>
<xsl:template match="/">
<xsl:for-each select=
"/*/*/*
[generate-id()
=
generate-id(key('kpchildByName', name())[1])
]">
<xsl:value-of select="concat(name(), ' ')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
distinct-values函数仅用于一个值,内联内容或属性内容。您是指完全不同的孩子的意思吗?是不同的元素名称,如大小,价格,等级,而不是值? – Myra 2010-05-20 07:45:36
对不起..耶,我想要得到所有不同的孩子元素名称列表 – Alex 2010-05-20 07:47:47
你可能不会被XPath抓住不同的名字! – Myra 2010-05-20 07:58:03