2009-12-03 30 views
5

PHP'nin basit XML'sini kullanarak bir XML dosyası oluşturdum, dosyayı kaydettim. Dosyayı fopen kullanarak ve içeriğini basarken php'de açarken. Her element için tüm girintili ve yeni çizgiler arayan xml dosyası istiyorumPHP SimpleXML yeni satır

<?xml version="1.0" encoding="UTF-8"?> 
<home><orderList><delivery_cost>0.00</delivery_cost><delivery_surname>TEST</delivery_surname><delivery_postcode>1234</delivery_postcode><status>1</status></orderList></home> 

(aşağıya bakınız): Böyle benim XML görünüyor. Birileri bunun nasıl yapıldığını biliyor mu?

Teşekkür

+0

XML dosyasını nasıl kaydediyorsunuz? –

cevap

10

Sen DOMDocument ait formatOutput özelliğini kullanarak bunu yapabilirsiniz.

böyle XML'inizi kaydet yerine, XML'inizi varsayarsak $yourXML adında bir değişkende olur ve $xmlFilePath bir dosyaya kaydetmek ister:

$dom = new DOMDocument(); 
$dom->loadXML($yourXML); 
$dom->formatOutput = true; 
$formattedXML = $dom->saveXML(); 

$fp = fopen($xmlFilePath,'w+'); 
fwrite($fp, $formattedXML); 
fclose($fp); 

Kod here uyarlanmıştır.

+0

Ah Güzel! DOMDocument'in bunu yapabileceği hakkında hiçbir fikrim yoktu ... – ChronoFish

+0

Ayrıca dom temsilini SimpleXML nesnesinden bir DOMElement/DOMDocument nesnesine aktarabilir ve DOMDocument nesnesindeki formatOutput özelliğini ayarlayabilirsiniz. Bu şekilde xml dizesini yeniden ayrıştırmanız gerekmez. ve VolkerK

+1

"formatOutput" ile ilgili sorun Sadece herhangi bir metin düğümünüz yoksa çalışır. IOW, eğer iki düğüm arasında tek bir çizgi varsa, çıktıyı güzelleştirmeye çalışmayacaktır. –

2

Buna "güzel yazdırma" denir ve SimpleXML bunu yapmaz. Yığın Taşması'nda ve web'de başka yerlerde arama yaparsanız, bunu yapan özel çözümler bulacaksınız.

Güzel yazdırma, görüntü bulanıklığı açısından iyidir, ancak Bu belgeleri biçiminde kaydetmeyi önermiyorum.

yine oldukça-yazıcı arıyorsanız, sen SimpleDOM 'ın asPrettyXML() "n \"

include 'SimpleDOM.php'; 

$home = simpledom_load_string('<?xml version="1.0" encoding="UTF-8"?> 
<home><orderList><delivery_cost>0.00</delivery_cost><delivery_surname>TEST</delivery_surname><delivery_postcode>1234</delivery_postcode><status>1</status></orderList></home>'); 

echo $home->asPrettyXML(); 
-3

yankı deneyebilirsiniz; yeni satır için xml

ob_start(); echo ' '. "\ n";?>