有沒有辦法增加PHP的DOMDocument formatOutput屬性的縮進大小?現在它縮進每個節點2個空格。我想使它成爲一個製表符或4個空格。有沒有辦法增加PHP的DOMDocument formatOutput屬性的縮進大小?
7
A
回答
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
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
有什麼方法可以在配置文件的某個地方改變它嗎?它不必在運行時。 – ThinkingInBits 2010-12-03 20:24:35