2010-12-03 46 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