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

Dan*_*ows 5 symfony

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

但是,我不确定如何在最后实际获取HTML.我试图在DomCrawler更改之后获取HTML字符串,但我无法找到如何做到这一点.

没有神奇的__toString()方法(当我这样做时它会返回错误print $crawler).没有get*()方法,没有html作为值的属性.我试过了,vardump($crawler)但没有用.


UPDATE

如果我使用

$crawler->first()->ownerDocument->saveHtml()
Run Code Online (Sandbox Code Playgroud)

它引发了一个关于"在非对象上调用saveHtml()"的异常,加上PHP错误:

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

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

但是,如果我改用使用

each( function($node, $i) { 
  print $i . " - " . $node; }
)
Run Code Online (Sandbox Code Playgroud)

然后它返回

0 - <html>...</html>
Run Code Online (Sandbox Code Playgroud)

Jak*_*las 6

编辑:正如@dbu所指出的那样,自从Symfony 2.3开始就可以使用这种Crawler::html()方法.

Crawler是DOMElement对象的集合(SplObjectStorage).知道您可以使用DOMElement,DOMNodeDOMDocument中提供的任何方法和属性:

$html = '';

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

echo $html;
Run Code Online (Sandbox Code Playgroud)

有用的链接:


dbu*_*dbu 5

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

请参阅Symfony 文档中的“操作和转储爬虫”。