如何从 Symfony 的 DomCrawler 组件获取更新的 HTML?

2024-04-15

我正在使用 Symfony 的 DomCrawler 组件。我已经成功检索节点、添加和修改 HTML。

但是,我不确定最后如何实际获取 HTML。我试图获取 DomCrawler 更改后的 HTML 字符串,但我不知道该怎么做。

没有魔法__toString()方法(当我这样做时它返回一个错误print $crawler)。没有get*()方法,没有以 html 作为值的属性。我尝试过一个vardump($crawler)但这没有帮助。


UPDATE

If I use

$crawler->first()->ownerDocument->saveHtml()

它抛出一个关于“在非对象上调用 saveHtml()”的异常,以及以下 PHP 错误:

未定义的属性:Symfony\Component\DomCrawler\Crawler::$ownerDocument

我尝试使用 eq(0) 而不是 first() 但得到相同的错误。

但是,如果我改为使用

each( function($node, $i) { 
  print $i . " - " . $node; }
)

然后它返回

0 - <html>...</html>

编辑:正如 @dbu 指出的,从 Symfony 2.3 开始,可以使用Crawler::html() http://symfony.com/doc/current/components/dom_crawler.html#adding-the-content方法。

Crawler是一组(SplObjectStorage)DOM元素 http://php.net/manual/en/class.domelement.php对象。知道您可以使用任何可用的方法和属性DOM元素 http://php.net/manual/en/class.domelement.php, DOMNode http://www.php.net/manual/en/class.domnode.php并且DOM文档 http://www.php.net/manual/en/class.domdocument.php:

$html = '';

foreach ($crawler as $domElement) {
    $html.= $domElement->ownerDocument->saveHTML();
}

echo $html;

有用的链接:

  • DOM元素 http://php.net/manual/en/class.domelement.php
  • DOMNode http://www.php.net/manual/en/class.domnode.php
  • DOM文档 http://www.php.net/manual/en/class.domdocument.php
  • DomCrawler 文档 http://symfony.com/doc/2.0/components/dom_crawler.html.
  • DomCrawler API 文档 http://api.symfony.com/2.0/Symfony/Component/DomCrawler/Crawler.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Symfony 的 DomCrawler 组件获取更新的 HTML? 的相关文章

随机推荐