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

前端之家收集整理的这篇文章主要介绍了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.f2er.com/html/223843.html

猜你在找的HTML相关文章