更正 XPath 查询以获取 div 内部文本

Posted

技术标签:

【中文标题】更正 XPath 查询以获取 div 内部文本【英文标题】:Correct XPath query to fetch div inner text 【发布时间】:2013-06-12 20:54:17 【问题描述】:

我正在使用 XPath 查询 html 文档,其中有以下 div 有文本:

<div class="h1">2008 Honda Accord Coupe<small> — Wuse II</small></div>

我只想获取&lt;div class="h1"&gt;2008 Honda Accord Coupe 的内部文本,而不包括&lt;small&gt;inner text&lt;/small&gt;

我正在执行以下 XPath 查询://div[@class='h1'],它肯定会返回整个 &lt;div&gt;...&lt;/div&gt; 节点。

如果没有&lt;small&gt;...&lt;/small&gt;,我怎样才能只获取部分

谢谢

【问题讨论】:

除非您没有指定您使用的 XML 解析器,否则这很难说。例如。使用 SimpleXML,您只需将该元素转换为字符串即可。使用 DOMDocument,您可以查询文本节点,如 One Trick Pony 所示。但正确的答案是:这取决于您使用的库/解析器。你不说是哪一个,所以很难回答,因为缺少信息。 【参考方案1】:

使用text()函数:

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

phpFiddle测试

【讨论】:

【参考方案2】:

你可以这样做:

$name = trim($xpath->query('//div[@class="h1"]')->item(0)->childNodes->item(0)->nodeValue);

var_dump($name);

【讨论】:

以上是关于更正 XPath 查询以获取 div 内部文本的主要内容,如果未能解决你的问题,请参考以下文章

(CSS / jQuery/ XPath) 用于从姐妹/兄弟节点 (DOM) 获取内部文本的选择器

XPath 搜索所有文本节点,而不是任何其他子节点的内部文本

Selenium 和 xpath:找到一个带有类/ID 的 div 并验证里面的文本

HTML Agility Pack - 使用 Align=left 样式从 DIV 获取文本

Selenium XPath 合并跨越文本并查找包含子字符串的元素

仅使用 Xpath 提取 <br> 标签内部分文本的文本