2010-11-16 38 views
1

J'essaye actuellement d'analyser un document avec DOMDocument, et j'ai de sérieux problèmes. J'ai créé un script qui tourne bien sur php 5.2.9, en extrayant le contenu en utilisant DOMNode :: nodeValue. Le même script n'obtient aucun contenu sur php 5.3.3 - même s'il navigue correctement vers les nœuds appropriés pour extraire le contenu.Qu'est-ce qui causerait que DOMNode :: nodeValue soit vide?

Fondamentalement, le code utilisé ressemble à ceci:

$dom = new DOMDocument(); 
$dom->loadHTML($data); 
$dom->preserveWhiteSpace = false; 
$xpath = new DOMXpath($dom); 
$nodelist = $xpath->query($query); 
$value = $nodelist->item(0)->nodeValue; 

J'ai vérifié pour vous assurer que le point (0) est en fait un nœud - il est là et même du bon type, mais nodeValue est vide.

Le script fonctionne sur certains documents mais pas sur d'autres (sur 5.3.3) - sur 5.2.9 il fonctionne sur tous les documents, renvoyant le nodeValue approprié.

+0

J'ai trouvé des problèmes comme celui-ci en travaillant avec différentes versions de PHP qui regroupent différentes versions de libxml, donc ne jetez pas ce problème. Cependant, un exemple de document reproduisant le problème peut aider à diagnostiquer. –

Répondre

1

J'ai l'impression d'avoir manqué quelque chose de basique et/ou un bug (même si le bug est en php ou en libxml je ne sais pas). Fondamentalement, le problème est résolu en s'assurant que les données chargées avec loadHTML sont codées en UTF-8. Rappelez-vous, ce n'est pas tout le document qui doit être encodé en UTF-8 - le problème ici était qu'il y avait un caractère dans l'élément qui n'était pas en UTF-8. Cela a ensuite éliminé tout le reste dans le traitement des documents. Ce qui m'apparaît, c'est que cela signifiait essentiellement que tout le contenu du document avait été jeté - mais la structure fonctionnait normalement. Aucune erreur ou quoi que ce soit de suggérer que le contenu a été considéré comme invalide.