Странное форматирование php domdocument

Я испытываю странное поведение при попытке отформатировать вывод XML при изменении структуры domdocument.

Я создал простой класс Item на основе DomDocument:

class Item extends DOMDocument {

private $root;

function __construct($version = null, $encoding = null) {
    parent::__construct($version, $encoding);
    $this->formatOutput = true;
    $this->root = $this->createElement("root");
    $this->root = $this->appendChild($this->root);
}

function build($name) {
    $item = $this->createElement("item");
    $name = $this->createTextNode($name);
    $item->appendChild($name);
    $this->getElementsByTagName("root")->item(0)->appendChild($item);
}
}

Теперь у меня есть небольшой пример использования:

$it = new Item('1.0', 'iso-8859-1');
$it->build("first");
$it->build("seccond");
$xml = $it->saveXML();

echo $xml;

$it2 = new Item('1.0', 'iso-8859-1');
$it2->loadXML($xml);

$it2->build("third");
$it2->build("fourth");
$it2->build("fifth");
$it2->formatOutput = true;

$xml2 = $it2->saveXML();

echo $xml2;

А теперь нечетный бит. Я вызываю сценарий, и он производит два XML-файла, как требуется, однако я заметил, что форматирование как-то теряется после редактирования документа. Это происходит без каких-либо отступов и т. Д.

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
  <item>first</item>
  <item>seccond</item>
</root>
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
  <item>first</item>
  <item>seccond</item>

<item>third</item><item>fourth</item><item>fifth</item></root>

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

Код выполняет свою работу, но мне было интересно, что могло бы стать причиной этого странного поведения.

1
задан Cœur 29 December 2016 в 12:35
поделиться

1 ответ

Вы можете «сказать» libxml, что начальные/конечные пробелы не имеют значения (и, таким образом, в этом случае libxml может вставлять пробелы для отступа элементов), например. установив для свойства preserveWhiteSpace значение false.

$this->formatOutput = true;
$this->preserveWhiteSpace  = false;
$this->root = $this->createElement("root");
2
ответ дан 2 September 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: