Ho cercato un bel po’ nella rete, ma non ho trovato soluzioni valide e complete contemporaneamente: soluzioni poco leggibili, soluzioni che non consideravano i text node…
L’unica soluzione che ho trovato è stata quella di prendere dei pezzi qui e lì e creare il mio parser HTML.
Ecco il codice:
<?php $xml="<root>aaa<a1><b1>ff</b1></a1></root>"; $dom=new DomDocument(); $dom->loadXML( $xml ); parse( $dom ); function parse( $node ) { foreach ($node->childNodes as $childNode) { if ($childNode->nodeType != XML_TEXT_NODE) { echo "node: " . $childNode->nodeName . "<br />"; if ($childNode->hasAttributes()) { foreach ($childNode->attributes as $attr) { echo "Attr: " . $attr->nodeName. " ". $attr->nodeValue . "<br />"; } } if($childNode->hasChildNodes()) { parse($childNode); } } else { echo "text node: " . $childNode->nodeValue . "<br />"; } } } ?>
Scusate la ruzzezza del codice (“ma non avuto il tempo di farlo in scala e di dipingerlo” [cit] ) 🙂
L’output è il seguente:
node: root text node: aaa node: a1 node: b1 text node: ff text node:
Vi conviene controllare se il text node è vuoto, così potete evitare di incappare in nodi vuoti come nell’ultima riga.
Buona navigazione nell’HTML. 🙂