2009-10-08 53 views
1

我是新來的PHP DOM對象,並有一個問題,我找不到解決方案。我有以下的HTML一個DOMDocument:如何使用PHP DOMDocument獲取第一級節點?

<div id="header"> 
</div> 
<div id="content"> 
    <div id="sidebar"> 
    </div> 
    <div id="info"> 
    </div> 
</div> 
<div id="footer"> 
</div> 

我需要得到上一級(標題,內容,頁腳)的所有節點。 hasChildNodes()不起作用,因爲第一級節點可能沒有子節點(頁眉,頁腳)。 現在我的代碼如下所示:

$dom = new DOMDocument(); 
$dom -> preserveWhiteSpace = false; 
$dom -> loadHTML($html); 
$childs = $dom -> getElementsByTagName('div'); 

但是,這讓我所有的div。有什麼建議?

回答

7

您可能需要DOM文檔之外去 - 也許轉換爲SimpleXML的或DOMXpath

$file = $DOCUMENT_ROOT. "test.html"; 
$doc = new DOMDocument(); 
$doc->loadHTMLFile($file); 

$xpath = new DOMXpath($doc); 
$elements = $xpath->query("/"); 
+0

謝謝,這幫助。 – 2009-10-08 21:03:22

1

以下是我搶了先級元素(在這種情況下,在錶行的頂級TD元素:

$doc = new DOMDocument(); 
$doc->preserveWhiteSpace = false; 
$doc->loadHTML($tr_element); 

$xpath = new DOMXPath($doc); 
$td = $xpath->query("//tr/td[1]")->item(0); 

do{ 
    if($innerHTML = self::DOMinnerHTML($td)) 
    array_push($arr, $innerHTML); 
    $td = $td->nextSibling; 
} while($td != null); 

$現在常用3包含了頂級TD元素,但沒有嵌套表達陣,你會從

$dom->getElementsByTagName('td'); 
得到

的DOMinnerHTML功能是我鉤住某處獲得元素/節點的innerHTML:

public static function DOMinnerHTML($element, $deep=true) 
{ 
    $innerHTML = ""; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
    $tmp_dom = new DOMDocument(); 
    $tmp_dom->appendChild($tmp_dom->importNode($child, $deep)); 
    $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
    return $innerHTML; 
} 
相關問題