如何使用 XPath 获取节点值/innerHTML?

Posted

技术标签:

【中文标题】如何使用 XPath 获取节点值/innerHTML?【英文标题】:How to get node value / innerHTML with XPath? 【发布时间】:2012-06-09 12:19:46 【问题描述】:

我有一个 XPath 可以选择我想要的类://div[@class='myclass']。但它返回给我整个 div(也有 <div class='myclass'>,但我想只返回这个标签的内容而不返回标签本身。我该怎么做?

【问题讨论】:

【参考方案1】:
node() = innerXml

text() = innerText

两者都是数组,所以text()[1] 是第一个子文本节点...

【讨论】:

多个文本节点在 XML 中的外观如何? text() 会返回所选节点的子节点的所有 innerTexts 的串联吗? @CoDEmanX: <div>text1<span>text2</span>text3</div> 正如我所说,它是一个数组,所以div/node()[0] == div/text()[0] == text1 节点、div/node()[1] == span 节点和div/node()[2] == div/text()[1] == text3 节点 - 你会必须自己连接它们(手动或使用接受数组的辅助函数)。【参考方案2】:

使用 xpath,您将得到返回的东西是路径中最后一个不是条件的东西。那是什么意思?好吧,条件是[](但你已经知道)和你的之间的东西,就像 pathElement[有一个 'class' 属性,值为 'my class']。 pathElement 直接位于[ 之前。

[] 之外的所有东西都是路径,所以在//a/b/c[@blah='bleh']/d abcd 都是路径元素,blah 是属性,bleh 是文字值。如果这条路径匹配,它将返回一个d,最后一个非条件的东西。

您的特定路径返回一个(一系列)div,它是 xpath 路径中的最后一件事。因此,此返回值包括***节点,div 在您的情况下,以及它(它们)下面的所有(它们的)子节点。节点可以是元素或文本(或 cmets、处理指令……)。

在一个节点下面可以有多个文本节点,因此数组 pOcHa 谈论。 x/text() 返回所有作为 x 直接子节点的文本,x/node() 返回所有子节点,包括文本。

【讨论】:

【参考方案3】:

老问题的新答案:

对于这个 XML

<div class="myclass">content</div>

您可以使用 XPath 通过以下两种方式之一仅选择 content

    文本节点选择

    这个 XPath,

    //div[@class='myclass']/text()
    

    将选择目标div元素的文本节点子节点, content,根据要求。

    元素的字符串值

    这个 XPath,

    string(//div[@class='myclass'])
    

    将返回目标div元素的string-value, content,再次应要求。

    更多信息:这是note 解释元素的字符串值

    元素节点的string-value 是 string-values 的所有文本节点 descendants 的元素 文档顺序中的节点。

【讨论】:

King ... 你帮我解决了 string(xpath) ?【参考方案4】:

你可以试试

//div[@class='myclass']/child::*

child::*选择上下文节点see details的所有子元素

【讨论】:

以上是关于如何使用 XPath 获取节点值/innerHTML?的主要内容,如果未能解决你的问题,请参考以下文章

Xpath 从兄弟节点的父节点获取值

Xpath 获取父节点,其中子节点的两个属性具有特定值

如果它是使用 XPath 在 Scrapy 中的其他节点的父节点,如何从子节点获取文本

使用 XPath,如何根据节点的文本内容和属性值来选择节点?

如何使用simpleXML(php)通过xpath获取父节点

XPath如何选择具有相同值的子节点