2010-12-03 15 views

回答

5

可能会更改libxml中的缩进字符串,但就我所知,您不能更改DOM使用的缩进。尽管如此,XMLWriter也是可能的。

作为替代方案,你可以使用整洁到prettyprint的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; 

但要注意,这个行为在上述情况下离奇。它删除条元素中的空格,除非您在条形标记上敲击xml:space="preserve"。当你这样做时,它会保留空格,但也会在前后添加换行符。你必须弄清楚它是否适合你的问题。见Tidy docs

+0

有什么方法可以在配置文件的某个地方改变它吗?它不必在运行时。 – ThinkingInBits 2010-12-03 20:24:35

7

这不是一个很好的解决方案,因为它依赖于知道该格式前缀双位:

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

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

+1

谢谢!这正是我需要将2个空格缩进为制表符,将返回值更改为:return str_repeat(“\ t”,intval(strlen($ a [1])/ 2))。'<';` – Kus 2012-07-24 01:21:08

相关问题