<books>
<physics id="abcd"> Book1 </physics>
<maths> Book2 </maths>
<history id="pqrs">Book3 </history>
</books>
此xpath表达式:
select=".//@ID"
会给我所有拥有id的节点。从那里我需要去父节点并获取其中的文本。
在上面的例子中,我需要将物理,历史作为答案。哪个xpath表达式可以给我这个结果?
答案 0 :(得分:0)
尝试this:
//*[@id]/text()
//*[@id]
将选择具有@id属性的任何元素。 text()
将为您提供该元素的子文本节点。
修改强>
要获取具有@id
属性的节点的名称,请使用XSLT中的name()
函数。 See this example:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<books>
<xsl:for-each select="//@id">
<book><xsl:value-of select="name(..)" /></book>
</xsl:for-each>
</books>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
如果要扫描整个文档,请选择以下选项之一:
//*[@id]/text()
//*[@id]/node()
使用//*[@id]
,您将获得所有具有名为id
的属性的元素节点。
使用text()
,您只能获得文本节点;使用node()
,您将获得所有子节点。