Я следую предложению по этому вопросу Robust, Mature HTML Parser for PHP, о разборе html, который может быть искажен с помощью DOMDocument.Loop over DOMDocument
Есть ли простой способ перебрать анализируемый документ? Поэтому я хотел бы перебрать html таким образом.
$html='<ul>
<li>value1</li>
<li>value1</li>
<li>value3
<p>subvalue</p>
</li>
</ul>
<p>hello world</p>';
$doc = new DOMDocument();
$doc->loadHTML($html);
???
foreach (??? as $node)
{
print $node->nodeName.':'.$node->nodeValue;
}
И получить результаты примерно так.
ul:
li:value1
li:value2
li:value3
p:subvalue
p:hello world
Использование $doc->childNodes
само по себе не делает то, что я хочу. Так как это не похоже на нижние ветви дерева. Я использовал код, предложенный halfdan, и я получаю такие результаты.
html:
html:value1
value1
value3
subvalue
hello world
Объекты DOM могут (но не всегда) иметь свойство, называемое $ childNodes, которое вы можете перебрать. Вы можете проверить наличие или иное свойство этого свойства с помощью метода hasChildNodes(). – GordonM