花了一些时间才弄明白这一点。到目前为止,我在手册中没有看到太多关于解释此故障的内容。(对于 PHP5 我认为)
formatOutput = true; 当 DOM 的来源是通过 load() 从文件加载时似乎会失败。例如
<?php
$dom = new DOMDocument();
$dom->load ("test.xml");
$dom->formatOutput = true;
$new_tag = $dom->createElement ('testNode');
$new_tag->appendChild (
$dom->createElement ('test', 'this is a test'));
$dom->documentElement->appendChild ($new_tag);
printf ("<pre>%s</pre>", htmlentities ($dom->saveXML()));
?>
不会缩进输出,并且会将修改后的节点显示在一长行中。在保存到文件时,会使编辑 config.xml 变得有点困难。
通过在 load() 之前添加 preserveWhiteSpace = false;,formatOutput 按预期工作。例如
<?php
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->load ("test.xml");
$dom->formatOutput = true;
$new_tag = $dom->createElement ('testNode');
$new_tag->appendChild (
$dom->createElement ('test', 'this is a test'));
$dom->documentElement->appendChild ($new_tag);
printf ("<pre>%s</pre>", htmlentities ($dom->saveXML()));
?>
注意:如果加载的 xml 文件(test.xml)有一个空的根节点,该节点没有缩写或没有子节点,则此方法将无法工作。
示例
无法工作
<?xml version="1.0"?>
<root>
</root>
可以工作
<?xml version="1.0"?>
<root/>
可以工作
<?xml version="1.0"?>
<root>
<!-- comment -->
</root>
可以工作
<?xml version="1.0"?>
<root>
<child/>
</root>