PHP simpleXML bagaimana cara menyimpan file dalam format?

88

Saya mencoba menambahkan beberapa data ke file XML yang ada menggunakan SimpleXML PHP. Masalahnya adalah ia menambahkan semua data dalam satu baris:

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

Dan seterusnya. Semuanya dalam satu baris. Bagaimana cara memperkenalkan jeda baris?

Bagaimana cara membuatnya seperti ini?

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

Saya menggunakan asXML()fungsi.

Terima kasih.

pengguna61734
sumber
Ada juga paket PEAR XML_Beautifier .
karim79

Jawaban:

148

Anda dapat menggunakan kelas DOMDocument untuk memformat ulang kode Anda:

$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simpleXml->asXML());
echo $dom->saveXML();
Gumbo
sumber
Terima kasih. Sederhana dan efisien.
Andrei Duma
3
Jadi tidak mungkinkah dengan SimpleXML?
Jonathan
@ xcy7e Tidak, saya rasa tidak.
Gumbo
1
Ketika saya mencoba untuk memformat konten yang saya tambahkan ke file, itu hanya berfungsi jika saya menentukan preservWhiteSpace dan formatOutput sebelum memuat konten yang ada.
Sam
30

Solusi Gumbo berhasil. Anda dapat melakukan pekerjaan dengan simpleXml di atas dan kemudian menambahkan ini di bagian akhir untuk menggemakan dan / atau menyimpannya dengan pemformatan.

Kode di bawah menggemakannya dan menyimpannya ke file (lihat komentar dalam kode dan hapus apa pun yang tidak Anda inginkan):

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

Gunakan dom_import_simplexmluntuk mengonversi ke DomElement. Kemudian gunakan kapasitasnya untuk memformat keluaran.

$dom = dom_import_simplexml($simple_xml)->ownerDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
echo $dom->saveXML();
troelskn
sumber
tidak bekerja. Fungsi ini mengembalikan DOMElement, bukan DOMDocument
karka91
Sepertinya documentElementseharusnya ownerDocument. Tidak yakin apakah api berubah atau ini hanya salah ketik. Saya sudah mengoreksinya sekarang.
troelskn
3
harap dicatat bahwa ini masih tidak berfungsi karena preservWhiteSpace dan formatOutput harus disetel sebelum mengimpor dokumen agar memiliki efek :)
karka91
Menarik - benar. Sepertinya jawaban Gumbo akan berhasil.
troelskn
2

Seperti yang dijawab Gumbo dan Witman ; memuat dan menyimpan dokumen XML dari file yang sudah ada (kami banyak pemula di sini) dengan DOMDocument :: load dan DOMDocument :: save .

<?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);
}
?>
kuantme
sumber