【发布时间】:2012-06-09 12:19:46
【问题描述】:
我有一个 XPath 可以选择我想要的类://div[@class='myclass']。但它返回给我整个 div(也有 <div class='myclass'>,但我想只返回这个标签的内容而不返回标签本身。我该怎么做?
【问题讨论】:
标签: xml parsing xpath html-parsing
我有一个 XPath 可以选择我想要的类://div[@class='myclass']。但它返回给我整个 div(也有 <div class='myclass'>,但我想只返回这个标签的内容而不返回标签本身。我该怎么做?
【问题讨论】:
标签: xml parsing xpath html-parsing
node() = innerXml
text() = innerText
两者都是数组,所以text()[1] 是第一个子文本节点...
【讨论】:
<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 节点 - 你会必须自己连接它们(手动或使用接受数组的辅助函数)。
使用 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() 返回所有子节点,包括文本。
【讨论】:
老问题的新答案:
对于这个 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 的元素 文档顺序中的节点。
【讨论】:
【讨论】: