У меня возникла проблема при использовании расширения PHP XMLWriter.
У меня есть совершенно функциональный скрипт, извлекающий действительный XML из старого сервера CentOS 5. Недавно я начал планировать миграцию на CentOS7, а затем тот же сценарий пропускает XMLWritter :: endElement (), поэтому не закрывает никаких элементов при запросе. В конце концов, PHP начинает закрывать их автоматически, потому что на самом деле все они остаются открытыми.
$writer->startElement( 'element1' );
$writer->text('1');
$writer->endElement('element1');
$writer->startElement( 'element2' );
$writer->text('2');
$writer->endElement('element2');
$writer->startElement( 'element3' );
$writer->text('3');
$writer->endElement('element3');
$writer->startElement( 'element4' );
$writer->text('4');
$writer->endElement('element4');
Я получаю большое дерево вложенных элементов:
<element1>1
<element2>2
<element3>3
<element4>4
...
</element4>
</element3>
</element2>
</element1>
кто-нибудь знает почему это?
XMLWriter-> endElement () не ожидает аргументов и не работает.
Используйте это вместо:
$writer->startElement( 'element1' );
$writer->text('1');
$writer->endElement();
$writer->startElement( 'element2' );
$writer->text('2');
$writer->endElement();
$writer->startElement( 'element3' );
$writer->text('3');
$writer->endElement();
$writer->startElement( 'element4' );
$writer->text('4');
$writer->endElement();
или, более кратко, используйте writeElement, если вы не используете атрибуты:
$writer->writeElement('element1', '1');
$writer->startElement('element2', '2');
$writer->startElement('element3', '3');
$writer->startElement('element4', '4');
Других решений пока нет …