Есть ли способ увеличить размер отступа свойства PHP DOMDocument formatOutput? - PullRequest
7 голосов
/ 03 декабря 2010

Есть ли способ увеличить размер отступа свойства PHP DOMDocument formatOutput?Прямо сейчас это отступ каждого узла 2 пробела.Я хотел бы сделать это либо табуляцией или 4 пробелами.

Ответы [ 2 ]

7 голосов
/ 03 декабря 2010

Это не очень хорошее решение, потому что оно зависит от знания того, что формату предшествует двойной пробел:

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

Он заменяет каждый отступ 4 пробеламиИли вы можете удалить *4 и использовать "\n" в качестве повторяющегося символа.

5 голосов
/ 03 декабря 2010

Может быть возможно изменить строку отступа в 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;

но учтите, что в вышеуказанном случае это ведет себя странно. Он удаляет пробелы в элементе bar, если вы не добавите xml:space="preserve" к тегу bar. Когда вы сделаете это, он сохранит пробелы, но также поместит новые строки до и после. Вы должны возиться с этим, чтобы увидеть, соответствует ли это вашей проблеме. См Tidy Docs

...