我正在使用 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(使用前将#替换为@)