2010-12-03 14 views
7

PHP'nin DOMDocument formatOutput özelliğinin girintileme boyutunu artırmanın bir yolu var mı? Şu anda her düğüm 2 boşluğunu girer. Bunu bir sekme ya da 4 boşluk yapmak istiyorum.PHP'nin DOMDocument formatOutput özelliğinin girintileme boyutunu artırmanın bir yolu var mı?

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

4 adet boşluk ile her girinti yerine geçer: bu formatın çift boşluk öneki olduğunu bilmeye bağlıdır çünkü

cevap

5

Girinti dizesini libxml içinde değiştirmek mümkün olabilir, ancak bilgilerime göre, DOM kullanımının girintisini değiştiremezsiniz. Ancak XMLWriter için mümkündür.

$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; 

ama bu yukarıdaki durumda ilginç davrandığını not:

alternatif olarak, XML prettyprint için Düzenli kullanabilirsiniz. Çubuk etiketindeki boşlukları, xml:space="preserve" çubuk etiketine çarpmadığınız sürece kaldırır. Bunu yaptığınızda boşlukları koruyacak, ama önce ve sonra yeni satırlar koydu. Problemine uyup uymadığını görmek için onunla ilgilenmelisin. Bakınız Tidy docs

+0

Bir yapılandırma dosyasında bu bir yer değiştirmek için herhangi bir yolu var mı? Çalışma zamanında olmak zorunda değil. – ThinkingInBits

+0

@Thinking Bilgimle, PHP'den bunu yapılandırmanın bir yolu yoktur. – Gordon

7

Bu çok güzel bir çözüm değildir. Ya da *4'u kaldırabilir ve yinelenen karakter olarak "\n"'u kullanabilirsiniz.

+1

Teşekkür ederiz! Bu, sekmelerin 2 boşluk girintisini değiştirmek için ihtiyacım olan şeydi, buna dönüşü değiştirdi: 'str_repeat (" \ t ", intval (strlen ($ a [1])/2)). '<'; – Kus

İlgili konular