2011-05-04 14 views
11

Domdocument PHP'nin dom seviyesinin ilk seviyesi nasıl? http:Domdocument PHP'nin dom seviyesinin ilk seviyesi nasıl?

//stackoverflow.com/questions/1540302/how-to-get-nodes-in-first-level-using-php-domdocument S & A tooken - değil çalışır kodla

Örnek

<?php 
$str=<<< EOD 
<div id="header"> 
</div> 
<div id="content"> 
    <div id="sidebar"> 
    </div> 
    <div id="info"> 
    </div> 
</div> 
<div id="footer"> 
</div> 
EOD; 

$doc = new DOMDocument(); 
$doc->loadHTML($str); 
$xpath = new DOMXpath($doc); 
$entries = $xpath->query("/"); 
foreach ($entries as $entry) { 
    var_dump($entry->firstChild->nodeValue); 
} 
?> 

sayesinde Yosef

kök düğüm altında elemanlarının birinci seviye

$dom->documentElement->childNodes 

ile erişilebilir

cevap

26

childNodes tesisinde 01 içerir foreach ile yineleyebileceğiniz.

Bu belgenin belge elemanı olan çocuk düğüme doğrudan erişim sağlayan bir kolaylık niteliktir DOMDocument::documentElement

bakınız.

ve DOMNode::childNodes bu düğümün tüm çocukları içeren

A DOMNodeList. Çocuk yoksa, bu boş bir DOMNodeList. childNodes yana

DOMNode bir özelliği yani DOMElement altında elemanlarının birinci seviyesi elde etmek için, bu özelliğe sahip (DOM sınıfların en çok) DOMNode uzanan herhangi bir sınıf DOMElement en childNode özelliği bu ulaşmak için olmasıdır. Geçersiz HTML veya kısmi belgeler üzerinde DOMDocument::loadHTML() kullanırsanız DOM ağacında, sizin örnekte HTML

olacak, böylece HTML ayrıştırıcı modülü, html ve vücut etiketleri ile bir HTML iskeleti katacak


Not Geçiş yaparken veya XPath kullanırken dikkate almanız gereken

<!DOCTYPE html … "> 
<html><body><div id="header"> 
</div> 
<div id="content"> 
    <div id="sidebar"> 
    </div> 
    <div id="info"> 
    </div> 
</div> 
<div id="footer"> 
</div></body></html> 

. Bunun sonucunda, sadece <body> DOMElement düğümü yineleme olacak

$dom = new DOMDocument; 
$dom->loadHTML($str); 
foreach ($dom->documentElement->childNodes as $node) { 
    echo $node->nodeName; // body 
} 

kullanılmıştır. Libxml'in iskeleti ekleyeceğini bilerek, örnek kodunuzdaki div öğelerini almak için <body> öğesinin childNode'ları üzerinde yineleme yapmanız gerekir.

$dom->getElementsByTagName('body')->item(0)->childNodes 

Ancak, yalnızca DOMElement düğümleri almak istiyorsanız doğru elemanı nodeType için yanlış veya sorguya preserveWhiteSpace ayarlamak için emin olmak gerekir ya yüzden de, herhangi bir boşluk düğümleri dikkate alacağımız Bunu yaparken, örneğin

foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) { 
    if ($node->nodeType === XML_ELEMENT_NODE) { 
     echo $node->nodeName; 
    } 
} 

veya kullanım XPath

$dom->loadHTML($str); 
$xpath = new DOMXPath($dom); 
foreach ($xpath->query('/html/body/*') as $node) { 
    echo $node->nodeName; 
} 

ek bilgiler: