2011-11-11 9 views
2

HTML文字列からすべてのプレーンテキストノードの配列を取得する方法はありますか?すべてのテキストノードを解析するPHP DOM

<p>This is a <b>nested <i>HTML</i> tag<b>...</p> 

This is anestedHTMLtag、および独立した要素として...として取得することになります。私は、このような文字列は、それが独立して「ネストされた」要素を取得したいと思います。

グーグルとSOの検索が一緒にコードのこの混乱をピースに私をリードしてきました:

$doc = new DOMDocument(); 
$doc->loadHTML($contents); 
$doc->loadHTML("<p>not in the brackets..</p>"); 
$xpath = new DOMXPath($doc); 
$textnodes = $xpath->evaluate('//text()'); 
echo '<pre>'.print_r($textnodes,1).'</pre>';die; 

これは私を与えている:

DOMNodeList Object 
(
) 

私は前に、任意のDOMオブジェクトを使ったことがない - もあります私のXPath偉大な - 私はここで水の非常に感じる!どんな助けもありがとう。

+2

DOMオブジェクトで 'print_r'や' var_dump'を使うことはできません。彼らは内部を公開していません。あなたのXPathは正しいです。テキストを出力するには、 'DOMNodeList'を' foreach($ textnodes as $ textnodes)echo $ textnode-> wholeText; 'に反復します。 http://codepad.viper-7.com/7lsFRGを参照してください – Gordon

+0

常に愚かなもの!ありがとうございました。 – Pete171

答えて

0

XPathはDOMNodeListを返します。DOMNodeListは正しく評価する必要があります。

$xpath = new DOMXpath($templateDOM); 
$xpath->registerNamespace("fcm", "http://www.w3.org/1999/xhtml"); 
$entries = $xpath->query("//img"); 

foreach($entries as $entry) { 

    $newVar = array(
      'src' => @$entry->attributes->getNamedItem('src')->nodeValue, 
      'title' => $entry->attributes->getNamedItem('title')->nodeValue, 
    ); 

    ...  

} 
関連する問題