2010-11-16 2 views
1

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

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

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

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

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

+0

Я нашел такие проблемы, как работа с разными версиями PHP, которые связывают разные версии libxml, поэтому не отбрасывайте, это просто ошибка. Однако образец документа, который воспроизводит проблему, может помочь диагностировать. –

ответ

1

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

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

Смежные вопросы