Что может привести к тому, что DOMNode :: nodeValue будет пустым? - PullRequest
3 голосов
/ 16 ноября 2010

В настоящее время я пытаюсь проанализировать документ с помощью DOMDocument, и у меня возникли серьезные проблемы. Я создал скрипт, который отлично работает на php 5.2.9, копируя содержимое, используя DOMNode :: nodeValue. Тот же сценарий не может получить какой-либо контент на php 5.3.3 - даже если он правильно перемещается к нужным узлам для извлечения контента.

В основном используемый код выглядит следующим образом:

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

Я проверил, чтобы убедиться, что item (0) на самом деле является узлом - он там и даже имеет правильный тип, но nodeValue пуст.

Скрипт работает с некоторыми документами, но не с другими (на 5.3.3) - на 5.2.9 он работает на всех документах, возвращая правильное значение nodeValue.

1 Ответ

2 голосов
/ 16 ноября 2010

Кажется, я пропустил что-то простое и / или ошибку (хотя, если ошибка в php или libxml, я не знаю). По сути, проблема устранена путем проверки того, что данные, загруженные с помощью loadHTML, имеют кодировку UTF-8. Имейте в виду, что не весь документ должен быть в кодировке UTF-8 - проблема здесь заключалась в том, что в элементе был символ, которого не было в UTF-8. Это затем отбросило все остальное в обработке документов.

Что меня поразило, так это то, что это означало, что все содержимое документа было выброшено, но структура работала нормально. Нет ошибок или чего-либо, что могло бы указывать на то, что содержание было сочтено недействительным.

...