Symfony DOMCrawler:如何更改 html?

Ale*_*jev 3 php symfony

如何编辑元素的html?我试过这个,但我收到这个错误。

致命错误:未捕获的 InvalidArgumentException:禁止从同一爬虫中的多个文档附加 DOM 节点。

$crawler = new Crawler('<h1>The title</h1>');
$crawler
    ->filter('h1,h2,h3,h4,h5,h6')
    ->each(function (Crawler $crawler, $i) use (&$replace) {
        $crawler->html('<span>test</span>' . $crawler->html());
    });
Run Code Online (Sandbox Code Playgroud)

Ale*_*ruk 5

用这个:

$doc = new DOMDocument;
$doc->loadHTML($html);
$crawler = new Crawler($doc);

$crawler
    ->filter('h1,h2,h3,h4,h5,h6')
    ->each(function (Crawler $crawler) use ($doc) {
        foreach ($crawler as $node) {
            $span = $doc->createElement('span', 'test');
            $node->parentNode->insertBefore($span, $node);
        }
    });
Run Code Online (Sandbox Code Playgroud)

重要提示:使用相同的 DOMDocument对象来创建对象中使用的新标签Crawler

DomCrawler 组件文档中所述:

Crawler 的一个实例表示一组 DOMElement 对象,这些对象是可以遍历的节点...

因此,您需要Crawler在操作之前遍历对象DOMElements