在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