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.


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();

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

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();

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);
}
?>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.