XMLWriter кажется неработающим, поскольку он создает объявления пространств имен, которые приводят к неправильному формату экземпляра.
Например:
$writer = new XMLWriter();
$writer->openUri( 'php://output' );
$writer->startIndent( true );
$writer->setIndentString ( "\t" );
$writer->startDocument( '1.0', 'UTF-8' );
$writer->startElement( 'root' );
$writer->writeAttributeNs( 'xmlns', 'bar', 'http://www.w3.org/2000/xmlns/', 'http://example.com' );
$writer->startElementNs( 'bar', 'baz', null );
$writer->endElement();
производит
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:bar="http://example.com" xmlns:xmlns="http://www.w3.org/2000/xmlns/">
<bar:baz/>
</root>
Обратите внимание на xmlns:xmlns="http://www.w3.org/2000/xmlns/"
, который:
- нигде в PHP-коде, который я написал
- нарушает ограничение пространства имен: зарезервированные префиксы и имена пространств имен
Независимо от того, что я делаю, если я создаю любое объявление пространства имен, XMLWriter выводит это недопустимое объявление пространства имен (в дополнение к объявлениям пространств имен, которые я хочу вывести).
Что мне не хватает? Потому что, как есть, это делает XMLWriter непригодным для использования.
Редактировать: Если это имеет значение, я использую PHP 5.4.16 и libxml2 2.7.8.