获取父元素文本的Xpath表达式

时间:2011-06-13 13:36:43

标签: xslt xpath expression

<books>
  <physics id="abcd"> Book1 </physics>
  <maths> Book2 </maths>
  <history id="pqrs">Book3 </history>
</books>

此xpath表达式:

select=".//@ID"

会给我所有拥有id的节点。从那里我需要去父节点并获取其中的文本。

在上面的例子中,我需要将物理,历史作为答案。哪个xpath表达式可以给我这个结果?

2 个答案:

答案 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(),您将获得所有子节点。