1

我正在使用 DOMCrawler 基于 CSS 选择器选择 HTML,如下所示;

$selector = '#content';
$html = $my_fetched_html;
$crawler = new Crawler($html);
$crawler = $crawler->filter($selector);

这一切都很好,如果我遍历 $crawler 元素,它确认选择器工作,即,我只得到一个 div 而不是完整的 html。

但是,当谈到保存 HTML 时,我遇到了问题,因为做这样的事情;

$html = '';

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

echo $html;

(如this question所示

我再次获得了完整的结构,我假设它是因为 $ownerDocument 仍然是原始(未选择的)$crawler 文档。

所以,我需要的是能够实例化一个新的 DomDocument(也许?)将我的 Element 添加到它,然后从那里 saveHTML() 。我认为?

伪代码;

$doc = new DomDocument
foreach ($crawler as $domElement) {
  $doc->addChild($domElement);
}

$new_html = $doc->saveHTML();

我很想得到任何帮助,它开始让我陷入困境。

4

1 回答 1

2

您需要传递您希望 html 为其 saveHTML() 的子项。即这样做:

$html.= $domElement->ownerDocument->saveHTML($domElement);
于 2012-09-04T09:09:10.423 回答