2011-05-04 5 views
11

Domdocument PHP가 dom 요소의 첫 번째 레벨을 얻는 방법은 무엇입니까? HTTP :Domdocument PHP가 dom 요소의 첫 번째 레벨을 얻는 방법은 무엇입니까?

//stackoverflow.com/questions/1540302/how-to-get-nodes-in-first-level-using-php-domdocument Q & A로부터 tooken -하지 작동 코드

<?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); 
} 
?> 

감사

Yosef는 루트 노드 아래의 요소의 첫 번째 레벨

$dom->documentElement->childNodes 

에 액세스 할 수

답변

26

childNodes에 속성이 01을 포함이며 foreach으로 반복 할 수 있습니다.

이 문서의 문서 요소가되어있는 아이 노드에의 직접 액세스를 가능하게하는 편리한 속성입니다 DOMDocument::documentElement

를 참조하십시오.

DOMNode::childNodes이 노드의 아이를 모두 포함한

DOMNodeList. 아이가없는 경우, 이것은 하늘의 DOMNodeList입니다. childNodes 이후

DOMNode의 속성 때문에 DOMElement 다음 요소의 첫번째 레벨을 얻기 위해, 이러한 특성을 갖는다 (DOM에서 대부분의 클래스이다) DOMNode 연장 어떤 클래스 DOMElement의 childNode에 등록한다는 액세스하는 것이다. 당신이 잘못된 HTML 또는 일부 문서에 DOMDocument::loadHTML()를 사용하는 경우 DOM 트리에, 귀하의 예제에서 HTML이

될 것 있도록 HTML 파서 모듈은, HTML과 몸 태그와 함께 HTML 골격을 추가 할 것을


<!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> 

XPath를 트래버스하거나 사용할 때 고려해야 할 사항입니다. 따라서, 단지 <body> DOMElement 노드를 반복한다

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

을 사용. libxml이 스켈레톤을 추가한다는 것을 알게되면 <body> 요소의 childNodes를 반복해야 예제 코드에서 div 요소를 가져와야합니다.

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

그러나, 당신은 단지 DOMElement 노드를 얻으려면 당신이 바로 그 요소 nodeType에 대한 허위 또는 쿼리에 preserveWhiteSpace을 설정 확인해야 하나, 그래서 또한, 공백 노드 고려 그럴 경우, 예를 들어,

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

또는 사용 XPath를

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

추가 정보 :

관련 문제