使用此XPath表達式:
//*[@name = /*/@name]
這將選擇的任何元素(包括命名root
所述頂部元件),其name
屬性具有相同的字符串值作爲該name
屬性的的頂部元素。當根據提供的XML文檔評估該XPath表達式時,選擇了兩個元素 - root
和subitem
。
我認爲只有這兩個的第二個元素是想要的。對於這一點,使用下面的XPath表達式:
//*/*[@name = /*/@name]
XSLT - 基於驗證:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="//*/*[@name = /*/@name]"/>
========
<xsl:copy-of select="//*[@name = /*/@name]"/>
</xsl:template>
</xsl:stylesheet>
當這個變換所提供的XML文檔應用:
<root name="xyz">
<anything>
<subitem name="xyz" />
</anything>
</root>
這兩個XPath表達式是e估價和選擇的節點被複制到輸出:
<subitem name="xyz"/>
========
<root name="xyz">
<anything>
<subitem name="xyz"/>
</anything>
</root>
<subitem name="xyz"/>
不錯。我不敢相信我沒有注意到它也選擇了'root'。 –