私はSymfonyのDomCrawlerコンポーネントを使用しています。私はノードを正常に取得し、HTMLを追加し修正しました。SymfonyのDomCrawlerコンポーネントから最新のHTMLを入手するにはどうすればよいですか?
しかし、最終的に実際にHTMLをどのように取得するのかはわかりません。私はそれがDomCrawlerによって変更された後、HTML文字列を取得しようとしているが、私はそれを行う方法を見つけることができません。
魔法はありません__toString()
メソッドです(print $crawler
のときはエラーを返します)。 get*()
メソッドはありません。値としてhtmlを持つプロパティはありません。私はvardump($crawler)
を試しましたが、それは役に立ちません。
UPDATE
私はそれが "非オブジェクト上)(saveHtmlを呼び出す" についての例外、プラスのPHPエラースロー
$crawler->first()->ownerDocument->saveHtml()
使用する場合:
を未定義のプロパティ:Symfony \ Component \ DomCrawler \ Crawler :: $ ownerDocument
first()の代わりにeq(0)を使ってみましたが、同じエラーが発生しました。
私は
each(function($node, $i) {
print $i . " - " . $node; }
)
を使用するように変更した場合しかし、それは
0 - <html>...</html>
OK、これを実行し、「非オブジェクト上でsaveHtml()を呼び出す」という例外をスローします。 'first()'の代わりに 'eq(0)'を使ってみましたが、同じエラーが出ます。私は 'each(function($ node、$ i){print $ i。" - "$ node;})'を使って "0 - [the html]"を返します。私の問題はSplObjectStorageの理解が不足しているようです。どのポインタも大歓迎です! –
私は思い出を書いていて、間違いました。すべてのトラバーサルクローラーメソッドは、クローラーインスタンスを返します。ただし、foreachループでCrawlerインスタンスを使用し、そのDOMElementオブジェクトのリストを反復処理することができます。私は自分の答えを更新しました。 –
SplObjectStorageのドキュメントへのリンク:http://php.net/manual/en/class.splobjectstorage.php – Jonathon