2009-04-28 14 views
81

PHP'nin SimpleXML'ini kullanarak varolan bir XML dosyasına veri eklemeye çalışıyorum. Sorun şu ki tüm verileri tek bir satırda ekler:PHP simpleXML Dosyayı nasıl biçimlendirilmiş şekilde kaydedebilirsiniz?

<name>blah</name><class>blah</class><area>blah</area> ... 

Ve benzerleri. Hepsi tek bir satırda. Satır sonları nasıl eklenir?

Bunu nasıl yaparım?

<name>blah</name> 
<class>blah</class> 
<area>blah</area> 

asXML() işlevini kullanıyorum.

Teşekkürler.

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($simpleXml->asXML()); 
echo $dom->saveXML(); 
+0

Ayrıca PEAR [XML_Beautifier] (http://pear.php.net/package/XML_Beautifier) ​​paketi de vardır. – karim79

cevap

133

Kodunuza yeniden biçimlendirmek için DOMDocument class kullanabilirsiniz. Daha sonra çıktıyı formatlamak için kapasitesini kullanın.

$dom = dom_import_simplexml($simple_xml)->ownerDocument; 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
echo $dom->saveXML(); 
+0

Teşekkürler. Harika çalışıyor. – Alagu

+0

Teşekkür ederim. Basit ve verimli. –

+2

Yani SimpleXML ile mümkün değil mi? –

17

kullanın dom_import_simplexml bir DOMElement dönüştürmek:

+0

çalışmıyor. İşlev bir DOMElement döndürür, bir DOMDocument – karka91

+0

Seems 'documentElement 'öğesi' ownerDocument 'olmalıdır. API değiştiğinden emin değilsiniz veya bu sadece bir yazım hatasıdır. Şimdi düzeltdim. – troelskn

+2

, bu hala korumaWhiteSpace ve formatOutput olarak ayarlanmayacağını unutmayın lütfen _before_ herhangi bir etkiye sahip olmak için belgeyi içe aktarın :) – karka91

27

Gumbo'nun çözümü hile yapar. Yukarıda simpleXml ile çalışabilir ve bunu ekleyerek ekleyebilir ve/veya biçimlendirmeyle kaydedebilirsiniz. Yankılanmayı altında

Kod o ve bir dosyaya kaydeder (kodda yorumları görmek ve istemediğiniz ne olursa olsun kaldırmak):

//Format XML to save indented tree rather than one line 
$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($simpleXml->asXML()); 
//Echo XML - remove this and following line if echo not desired 
echo $dom->saveXML(); 
//Save XML to file - remove this and following line if save not desired 
$dom->save('fileName.xml'); 
+0

hala bir çekicilik gibi çalışıyor! – Risinek

İlgili konular