Boucle sur DOMDocument
Je suis à la suite de la suggestion de cette question Robuste, Mature Analyseur HTML pour PHP, sur l'analyse du code html qui peut être incorrect avec DOMDocument.
Est-il un moyen facile pour faire une boucle sur le document analysé? Je voudrais donc faire une boucle sur le html comme ceci.
$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;
}
Et d'obtenir des résultats un peu comme cela.
ul:
li:value1
li:value2
li:value3
p:subvalue
p:hello world
À l'aide de $doc->childNodes
par lui-même n'a pas vraiment faire ce que je veux. Depuis, il ne semble pas aller vers le bas pour baisser les branches de l'arbre. J'ai utilisé le code suggéré par halfdan et j'obtiens des résultats comme ça.
html:
html:value1
value1
value3
subvalue
hello world
- Les objets DOM peut (mais pas toujours) ont une propriété appelée $childNodes que vous pouvez parcourir. Vous pouvez vérifier la présence ou non de cette propriété avec la hasChildNodes() la méthode.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
$doc->childNodes
par lui-même fait ce que je veux. Fondamentalement, je veux visiter chaque nœud de l'arbre, et pas seulement voir tous les nœuds à un niveau.Vous devez utiliser PHP Simple HTML DOM Parser et le code suivant:
Il fonctionne exactement comme prévu. Je l'ai vérifié avec l'entrée que vous avez fournis et a obtenu les résultats suivants:
J'ai eu des problèmes avec des éléments de données c, où même des éléments qui n'ont pas d'enfants où le renvoi de ce qu'ils ont fait.
Je ne suis pas sûr de savoir pourquoi il était.
Le travail, j'ai trouvé a été de changer
à
Et le code fonctionne maintenant parfaitement.
Une façon consiste à pied de l'arbre comme suit:
Cela fonctionne pour la plupart des documents, cependant, il ressemble à la fois la
parentNode
est en quelque sorte pas correctement et lenext_node()
fonction se termine le retour de la mauvaise information.