使用这个 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 表达式并将所选节点复制到输出:
<subitem name="xyz"/>
========
<root name="xyz">
<anything>
<subitem name="xyz"/>
</anything>
</root>
<subitem name="xyz"/>