Как получить обновленный HTML из компонента Symfony DomCrawler? - PullRequest
5 голосов
/ 05 марта 2012

Я использую компонент Symfony DomCrawler. У меня он успешно извлекает узлы, добавляет и изменяет HTML.

Однако я не уверен, как на самом деле вывести HTML в конце. Я пытаюсь получить строку HTML после того, как она была изменена DomCrawler, но я не могу найти, как это сделать.

Нет волшебного __toString() метода (и он возвращает ошибку, когда я делаю print $crawler). Нет методов get*(), нет свойств со значением html. Я пробовал vardump($crawler), но это не помогает.


UPDATE

Если я использую

$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 ]

6 голосов
/ 05 марта 2012

РЕДАКТИРОВАТЬ: Как указал @dbu, начиная с Symfony 2.3 можно использовать метод Crawler::html().

Crawler - это набор (SplObjectStorage) из DOMElement объектов. Зная, что вы можете использовать любой метод и свойство, доступные в DOMElement , DOMNode , а также DOMDocument :

$html = '';

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

echo $html;

Полезные ссылки:

3 голосов
/ 05 октября 2013

Поскольку это происходит довольно рано при поиске, я просто хотел отметить, что в сканер был добавлен метод html() в Symfony 2.3

См. " Управление и сброс сканера" ​​ "в документации Symfony.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...