2010-06-03 69 views
2

有孩子的節點的內容:獲取我有以下的HTML DOM文檔通過

<html ><body >Body text <div >div content</div></body></html> 

我怎麼能拿沒有嵌套<div>體的內容? 我需要得到'正文',但沒有線索如何做到這一點。運行

$domhtml = DOMDocument::loadHTML($html); 
print $domhtml->getElementsByTagName('body')->item(0)->nodeValue; 

結果是 '身體textdiv內容',這不正是我想要得到

+0

假設你的實際的HTML比較複雜,你希望只排除在特定元素的文本?或者你是否希望排除不是身體的第一個孩子的所有文字? – dnagirl 2010-06-03 14:35:37

+0

@dnagirl:我的html實際上並不那麼複雜,但我寧願要排除所有不是第一個孩子的身體 – altern 2010-06-03 14:48:06

回答

5

我喜歡DOMXPath像這樣的問題。這是非常靈活的

$domhtml = DOMDocument::loadHTML($html); 
$xpath = new DOMXPath($domhtml); 
$query="/html/body/text()"; //gets all text nodes that are direct children of body 

$txtnodes = $xpath->query($query); 

foreach ($txtnodes as $txt) { 
    echo $txt->nodeValue; 
} 
2
$domhtml = DOMDocument::loadHTML($html); 
print $domhtml->getElementsByTagName('body')->item(0)->textContent; 
+0

的文字嗎?恐怕它不能按預期工作。我記得,DOMNode沒有innerHTML屬性 – altern 2010-06-03 14:44:51

0

基於從php.net評論這應該爲你工作:

$domhtml = DOMDocument::loadHTML($html); 
print $domhtml->getElementsByTagName('body')->firstChild->nodeValue;