如何使用 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
a、b、c 和d 都是路径元素,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 在 Scrapy 中的其他节点的父节点,如何从子节点获取文本
使用 XPath,如何根据节点的文本内容和属性值来选择节点?