PHP simpleXML dosyası biçimlendirilmiş bir şekilde nasıl kaydedilir?


89

PHP'nin SimpleXML'sini kullanarak mevcut bir XML dosyasına bazı veriler eklemeye çalışıyorum. Sorun, tüm verileri tek bir satıra eklemesidir:

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

Ve bunun gibi. Hepsi tek bir satırda. Satır sonları nasıl verilir?

Nasıl böyle yaparım?

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

Ben asXML()işlevi kullanıyorum .

Teşekkürler.


Ayrıca PEAR XML_Beautifier paketi de var.
karim79

Bunun oldukça eski bir soru olduğunu biliyorum ve çözüm bulmuş olmalısın. Başkaları için faydalı olabilir, bir göz atın github.com/spatie/array-to-xml
Vaibhav Malushte

Yanıtlar:


148

Sen kullanabilirsiniz DOMDocument sınıfı kodunuzu yeniden biçimlendirmek için:

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

Teşekkür ederim. Basit ve verimli.
Andrei Duma

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

@ xcy7e Hayır, sanmıyorum.
Bamya

1
Bir dosyaya eklediğim içeriği biçimlendirmeye çalıştığımda, yalnızca mevcut içeriği yüklemeden önce preserveWhiteSpace ve formatOutput belirtmişsem işe yaradı.
Sam

31

Gumbo'nun çözümü hile yapıyor. Yukarıdaki simpleXml ile çalışabilir ve ardından bunu eko yapmak ve / veya biçimlendirme ile kaydetmek için sonuna ekleyebilirsiniz.

Aşağıdaki kod onu yansıtır ve bir dosyaya kaydeder (koddaki yorumlara bakın ve istemediklerinizi kaldırın):

//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');

19

dom_import_simplexmlDomElement'e dönüştürmek için kullanın . Ardından çıktıyı biçimlendirmek için kapasitesini kullanın.

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

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

Görünüşe documentElementolmalıdır ownerDocument. API'nin değişip değişmediğinden veya bunun sadece bir yazım hatası olduğundan emin değilim. Şimdi düzelttim.
troelskn

3
lütfen bunun hala çalışmadığını unutmayın, çünkü herhangi bir etkiye sahip olmak için belgeyi içe aktarmadan önce preserveWhiteSpace ve formatOutput ayarlanmalıdır :)
karka91

İlginç - haklısın. Görünüşe göre Gumbo'nun cevabı işe yarayacak.
troelskn

2

As Bamya ve witman cevap verdi; DOMDocument :: load ve DOMDocument :: save ile mevcut bir dosyadan bir XML belgesinin yüklenmesi ve kaydedilmesi (burada pek çok yeniyiz) .

<?php
$xmlFile = 'filename.xml';
if( !file_exists($xmlFile) ) die('Missing file: ' . $xmlFile);
else
{
  $dom = new DOMDocument('1.0');
  $dom->preserveWhiteSpace = false;
  $dom->formatOutput = true;
  $dl = @$dom->load($xmlFile); // remove error control operator (@) to print any error message generated while loading.
  if ( !$dl ) die('Error while parsing the document: ' . $xmlFile);
  echo $dom->save($xmlFile);
}
?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.