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

Thi*_*its 7 php xml domdocument

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

Mat*_*hew 7

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

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

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

  • 谢谢你!这正是我将 2 个空格缩进更改为制表符所需的,将返回更改为:`return str_repeat("\t",intval(strlen($a[1]) / 2)).'&lt;';` (2认同)

Gor*_*don 5

有可能更改libxml中的缩进字符串,但据我所知,您无法更改DOM使用的缩进.但是,XMLWriter可能.

作为替代方案,您可以使用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;
Run Code Online (Sandbox Code Playgroud)

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