XMLReader сообщает о дополнительном содержимом в конце документа в почти пустом xml-файле.

У меня проблемы с использованием XMLReader на нашем рабочем сервере, в то время как на наших серверах разработки все работает гладко. XMLReader всегда выдает «ошибку парсера: дополнительный контент в конце документа» при чтении файла xml. Независимо от того, содержит ли он тысячи элементов или всего одну строку.

$reader = new \XMLReader();
$reader->open($xmlFileName, 'UTF-8');
while ( $reader->read() ) { ... do nothing ... }
$reader->close();

XML выглядит так в самой простой форме:

<?xml version="1.0" encoding="UTF-8"?>
<data><articles><![CDATA[test]]></articles></data>

Каждый валидатор xml говорит, что он правильно сформирован, но ошибки все еще выдаются.

Единственная разница, которую я могу заметить между нашей системой разработки и нашей живой системой, заключается в том, что наша система разработки (Ubuntu) имеет версию libxml2 2.7.16, а живая система (CentOs) — 2.6.16. Может ли это быть причиной?


person Carsten    schedule 10.06.2011    source источник
comment
Что показывает шестнадцатеричный дамп XML-файла (т. е. есть ли невидимое содержимое в конце)?   -  person Richard    schedule 10.06.2011
comment
Библиотека производственного сервера и среда PHP установлены с использованием RPM или собраны и загружены в нее? Другими словами, вы создаете «php-xml» вручную или используете RPM?   -  person benosteen    schedule 10.06.2011
comment
Может ли быть так, что ваш настоящий XML имеет несколько корневых элементов?   -  person Tomalak    schedule 10.06.2011
comment
Дох... Это не имеет ничего общего с XMLReader или libxml. Файл xml, который я читаю, создается XMLWriter за несколько секунд до этого, и там отсутствовал окончательный XMLWriter-flush(), который завершает структуру xml. Я не знаю, почему это никогда не появлялось в моей системе разработки, но теперь все работает так, как ожидалось.   -  person Carsten    schedule 10.06.2011


Ответы (1)


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

Я с подозрением отношусь к вашей обработке CDATA (попробуйте пробелы вокруг содержимого, поэтому) и, кажется, помню некоторые старые ошибки в отношении обработки CDATA в вашей довольно старой производственной версии, а также если вы действительно получили UTF-8 (некоторые библиотеки чувствителен к символам и настройкам по умолчанию, например, ручные переопределения игнорируются, если установлены правильные настройки. Кроме того, является ли «-» в «UTF-8» тире, обычным тире или каким-либо другим тире?)

Кроме того, попробуйте опубликовать свой реальный XML, даже в шестнадцатеричном дампе, но я, кажется, припоминаю, что кодировки символов для UTF-8, рассматриваемые как что-то еще, будут создавать дополнительные символы (которых на самом деле нет).

person AlexanderJohannesen    schedule 10.06.2011