有没有办法增加PHP的DOMDocument formatOutput属性的缩进大小?现在它将每个节点缩进2个空格。我想把它作为一个标签或4个空格。
答案 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