2015-06-01 1 views
1

Я хочу получить список дочерних узлов верхнего уровня из строки HTML. Использование РНР DomDocument, я попытался следующие:PHP DomDocument: получение списка дочерних узлов верхнего уровня

$html = new DomDocument(); 
$html->loadHTML('<p>One</p><p>Two</p><p>Three</p>'); 
foreach($html->childNodes as $node) { 
    echo $node->nodeName . ':' . $node->nodeValue. '<br>'; 
} 

К сожалению, выход я получаю

html: 
html:OneTwoThree 

Где то, что я хочу что-то вроде

paragraph: One 
paragraph: Two 
paragraph: Three 

ли я что-то отсутствует? Документация PHP не очень помогает. Я пробовал на PHPTester с использованием разных версий PHP и получил тот же результат.

ответ

1

Помните, что DomDocument создает весь документ dom, а не только фрагмент одного, поэтому вы должны быть в body элементах.

foreach($html->getElementsByTagName('body')->item(0)->childNodes as $node) { 
+0

Спасибо! Это работает :) – gosukiwi

1

Вы можете использовать getElementsByTagName() метод:

$html = new DomDocument(); 
$html->loadHTML('<html><p>One</p><p>Two</p><p>Three</p></html>'); 
$nodes = $html->getElementsByTagName('p'); 
foreach($nodes as $node) { 
    echo $node->nodeName . ':' . $node->nodeValue. '<br>'; 
} 

// The above results in: 
// p:One 
// p:Two 
// p:Three 

Я надеюсь, что это эквивалент для ваших целей.

+0

Большое спасибо! :) – gosukiwi