有没有办法增加PHP的DOMDocument formatOutput属性的缩进大小?

时间:2010-12-03 20:09:27

标签: php xml domdocument

有没有办法增加PHP的DOMDocument formatOutput属性的缩进大小?现在它将每个节点缩进2个空格。我想把它作为一个标签或4个空格。

2 个答案:

答案 0 :(得分:7)

这不是一个非常好的解决方案,因为它取决于知道格式前缀为双倍空格:

preg_replace_callback('/^( +)</m', function($a) { 
  return str_repeat(' ',intval(strlen($a[1]) / 2) * 4).'<';  
}, $doc->saveXML());

它用4个空格替换每个缩进。或者您可以删除*4并使用"\n"作为重复字符。

答案 1 :(得分:5)

有可能在libxml中更改缩进字符串,但据我所知,您无法更改DOM使用的缩进。但XMLWriter可能会有。{/ p>

作为替代方案,您可以使用Tidy来绘制XML:

$dom = new DOMDocument;
$dom->preserveWhiteSpace = TRUE;
$dom->loadXml('<root><foo><bar>   baz   </bar></foo></root>');
$tidy = tidy_parse_string($dom->saveXml(), array(
    'indent' => TRUE,
    'input-xml' => TRUE,
    'output-xml' => TRUE,
    'add-xml-space' => FALSE,
    'indent-spaces' => 4
));
$tidy->cleanRepair();
echo $tidy;

但请注意,在上述情况下,这表现得很古怪。它会删除bar元素中的空格,除非您在条形标记上拍了xml:space="preserve"。当你这样做时,它会保留空格,但也会在前后放置换行符。你必须弄清楚它是否适合你的问题。见Tidy docs