2012-03-05 17 views
4

私は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> 

答えて

3

は、私はちょうど

symfonyのドキュメントで「Manipulating and Dumping a Crawler」を参照してください方法html()はsymfonyの2.3でクローラに追加されたことを指摘したかったです。

6

EDIT返します@dbuが指摘したように、symfonyの2.3以来、Crawler::html()メソッドを使用することが可能です。

クローラは、DOMElementオブジェクトのセット(SplObjectStorage)です。あなたもDOMDocumentDOMElementDOMNodeとの任意の方法および使用可能なプロパティを使用することができることを知っている:

$html = ''; 

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

echo $html; 

便利なリンク:

+0

OK、これを実行し、「非オブジェクト上でsaveHtml()を呼び出す」という例外をスローします。 'first()'の代わりに 'eq(0)'を使ってみましたが、同じエラーが出ます。私は 'each(function($ node、$ i){print $ i。" - "$ node;})'を使って "0 - [the html]"を返します。私の問題はSplObjectStorageの理解が不足しているようです。どのポインタも大歓迎です! –

+0

私は思い出を書いていて、間違いました。すべてのトラバーサルクローラーメソッドは、クローラーインスタンスを返します。ただし、foreachループでCrawlerインスタンスを使用し、そのDOMElementオブジェクトのリストを反復処理することができます。私は自分の答えを更新しました。 –

+0

SplObjectStorageのドキュメントへのリンク:http://php.net/manual/en/class.splobjectstorage.php – Jonathon