我花了一些时间才找到这个。到目前为止,我在手册中没有看到太多关于这个故障的解释。(我认为是 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>