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

时间:2012-03-05 11:28:22

标签: symfony

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

但是,我不确定如何在最后实际获取HTML。我试图在DomCrawler更改之后获取HTML字符串,但我无法知道如何操作。

没有魔法__toString()方法(当我执行print $crawler时它会返回错误)。没有get*()方法,没有将html作为值的属性。我试过vardump($crawler),但这没有帮助。


更新

如果我使用

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

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

  

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

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

但是,如果我改用

each( function($node, $i) { 
  print $i . " - " . $node; }
)
然后它返回

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

2 个答案:

答案 0 :(得分:6)

编辑:正如@dbu所指出的,自Symfony 2.3以来,可以使用Crawler::html()方法。

Crawler是DOMElement个对象的集合(SplObjectStorage)。知道您可以使用DOMElementDOMNode以及DOMDocument中提供的任何方法和属性:

$html = '';

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

echo $html;

有用的链接:

答案 1 :(得分:3)

由于这在搜索时很早就出现了,我只想指出在Symfony 2.3中将方法html()添加到爬虫中

请参阅Symfony文档中的“Manipulating and Dumping a Crawler”。