2010-12-03 4 views
7

PHP의 DOMDocument formatOutput 속성의 들여 쓰기 크기를 늘릴 수있는 방법이 있습니까? 지금은 각 노드를 2 칸 들여 씁니다. 탭이나 4 칸으로 만들고 싶습니다.PHP의 DOMDocument formatOutput 속성의 들여 쓰기 크기를 늘릴 수있는 방법이 있습니까?

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

그것은 4 공백으로 각 들여 쓰기를 대체는 형식이 두 자리로 시작되는 것을 알고에 의존하기 때문에

답변

5

libxml에서 들여 쓰기 문자열을 변경할 수는 있지만, DOM 지식에 따라 들여 쓰기 DOM을 변경할 수는 없습니다. 그래도 XMLWriter은 가능합니다.

$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을 prettyprint을 지저분하게 사용할 수 있습니다. bar 태그에서 xml:space="preserve"을 두드리지 않는 한 bar 요소의 공백을 제거합니다. 그렇게하면 공백을 유지하면서 줄 바꿈을 넣을 수 있습니다. 당신이 문제를 해결할 수 있는지 알아보기 위해 그것을 사기해야합니다. Tidy docs

+0

구성 파일의 어딘가에서이를 변경할 수 있습니까? 그것은 실행 시간에있을 필요는 없습니다. – ThinkingInBits

+0

@ think 나는 PHP에서 이것을 구성 할 방법이 없다는 것을 알고 있습니다. – Gordon

7

이것은 매우 좋은 해결책이 아니다. 또는 *4을 제거하고 "\n"을 반복 문자로 사용할 수 있습니다.

+1

고맙습니다! 이것은 정확하게 2 스페이스 들여 쓰기를 탭으로 바꾸기 위해 필요한 것이고, 리턴 값을 다음과 같이 바 꾸었습니다 :'return str_repeat ("\ t", intval (std) ($ a [1])/2)). – Kus

관련 문제