微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DomCrawler Symfony:如何从不包括孩子的节点获取内容?

可以说我有一个像这样的html页面
<html>
<head></head>
<body>
    Hello World!
    <div> my other content </div>
</body>
</html>

我如何从DOM Crawler获得“Hello World”?

我认为这会奏效:

$crawler = $crawler
    ->filter('body > div');
    ->reduce(function (Crawler $node,$i) {
        return false;
    });

但这显然会出错:

invalidargumentexception: "The current node list is empty"

解决方法

不知道这是否可以更容易,但您可以使用XPath提取文本节点内容
$crawler->filterXPath('//body/text()')->text();

结果将是一个包含Hello World的字符串,文本前后的空格直到第一个标记.因此,如果您只需要文本本身,则可以修剪该值:

$helloWorld = trim($crawler->filterXPath('//body/text()')->text());

但是,如果您在正文中有多个文本节点,这将适用于您的情况,例如:

<html>
<head></head>
<body>
    Hello World!
    <div> my other content </div>
    Some other text
</body>
</html>

你可能会这样做:

$crawler->filterXPath('//body/text()')->extract(['_text']));

这将返回一个数组:

Array
(
    [0] =>
        Hello World!

    [1] =>
        Some other text

)

原文地址:https://www.jb51.cc/html/223843.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐