2014-11-05 62 views
0

我有麻煩嘗試使用PHP的DOMDocument檢索節點的值。如果需要節點有一些子節點 - 節點值也將包含它們的內容。我能夠檢索沒有其子節點內容的節點值嗎?

例子:我有一個具有以下內容的HTML文件:

<div> 
    small 
    <div id="main_div"> 
    Main div with a huge content in it 
    <div>Subdiv 1</div> 
    <div>Subdiv 2</div> 
    <div>Subdiv 3</div> 
    Tail of the main div 
    </div> 
</div> 

而下面的PHP腳本:

$site = new DOMDocument(); 
$site->loadHTML($content); 
$divs = $site->getElementsByTagName('div'); 
foreach($divs as $div){ 
    echo $div->textContent; 
    echo "<br>"; 
} 

如果我試圖讓節點ID main_div它的nodeValue將等於:

Main div with a huge content in it Subdiv 1 Subdiv 2 Subdiv 3 Tail of the main div 

我能檢索到只有「M ain div中有一個巨大的內容尾部的主分區「(main_div的內容沒有子女)?

我已閱讀'Getting content of the node having childs via DOMDocument'這個問題,但接受的答案讓我得到相同的結果:節點正在輸出其子女的內容。

回答

2

每個div元素內都是包含實際文本的DOMText節點。而不是使用$div->textContent,收集每個子文本節點的nodeValues:

foreach($divs as $div){ 
    $text = array(); 

    foreach ($div->childNodes as $childNode) { 
    if ($childNode->nodeType === XML_TEXT_NODE && $childNode->nodeValue) { 
     $text[] = trim($childNode->nodeValue); 
    } 
    } 

    if ($text) { 
    print implode(' ', $text) . '<br>'; 
    } 
} 
+0

謝謝Alf!有效!唯一的問題是'#main_div'內容分成兩部分。但它可以簡單地連接在一起。 – 2014-11-05 20:30:49