2011-11-11 126 views
2

有沒有一種方法可以從HTML字符串中檢索所有純文本節點的數組?我想它來檢索「嵌套」獨立地元件,因此像這樣的字符串:PHP DOM解析所有文本節點

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

將被檢索爲This is anestedHTMLtag,和...爲單獨的元件。

谷歌搜索,並因此搜索使我拼湊這混亂的代碼:

$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是正確的。用'foreach($ textnodes作爲$ textnode)迭代'DOMNodeList' echo $ textnode-> wholeText;'打印文本。見http://codepad.viper-7.com/7lsFRG – Gordon

+0

總是愚蠢的事情!謝謝。 – Pete171

回答

0

XPath返回一個需要正確評估的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, 
    ); 

    ...  

}