1

私はDOMCrawlerを使用して、CSSセレクターに基づいてHTMLを選択しています。

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

これはすべて問題ありません。$crawler要素を反復処理すると、セレクターが機能したことが確認されます。つまり、完全なhtmlではなくdivのみが取得されます。

しかし、HTMLを保存することになると、このようなことをするので問題があります。

$html = '';

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

echo $html;

(この質問で示されているように)

$ ownerDocumentがまだ元の(選択されていない)$ crawlerドキュメントであるため、完全な構造を再び取得し、それを想定しています。

したがって、必要なのは、新しいDomDocumentをインスタンス化できるようにすることです(おそらく?)要素をそれに追加し、そこからHTML()を保存します。おもう?

擬似コード;

$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 に答える