如何使用XPath在另一个子元素之后选择子文本

时间:2016-03-31 12:29:21

标签: html xml xpath

我正在使用Crawler库来帮助您创建一些XPath表达式来获取HTML标记的内容。我目前正在从页面中读取HTML5内容,并且我希望以这种方式检索未插入标记的文本。

<div class="country">
    <strong> USA </strong>
        Some text here
</div>

所以我正在尝试将此文本此处的某些文字,但抓取工具库允许获取标记中的内容,而不是在其外部。

所以任何替代方案请。

这些是Crawler部分:

$crawler = new Crawler();
$crawler->xpathSingle($xml, '//div[@class="country"]/strong/@text');

1 个答案:

答案 0 :(得分:2)

这些XPath中的任何一个都将按要求返回"Some text here"

  • normalize-space(substring-after(//div[@class="country"], 'USA'))

  • normalize-space(//div[@class="country"]/strong/following-sibling::text())

根据您希望容纳的变体类型进行选择。

信用:第二个例子来源于comment @Keith Hall首次提出的建议。

<强>更新

正如我所提到的,你需要根据你想要容纳的变化来选择你的XPath。我刚刚发布的帖子比您遇到的变化:

<div class="country">
    <strong> USA </strong>
        Some text here
    <i>Do not want this text</i>
</div>

您可以使用上面的第二个XPath排除"Do not want this text"并按要求返回"Some text here",但只需获取下面的第一个文本节点:

  • normalize-space(//div[@class="country"]/strong/following-sibling::text()[1])