Próbuję dodać dane do istniejącego pliku XML przy użyciu SimpleXML PHP. Problem w tym, że dodaje wszystkie dane w jednej linii:
<name>blah</name><class>blah</class><area>blah</area> ...
I tak dalej. Wszystko w jednej linii. Jak wprowadzić podziały wierszy?
Jak to zrobić?
<name>blah</name>
<class>blah</class>
<area>blah</area>
Używam asXML()
funkcji.
Dzięki.
php
formatting
simplexml
user61734
źródło
źródło
Odpowiedzi:
Możesz użyć klasy DOMDocument do ponownego sformatowania kodu:
$dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($simpleXml->asXML()); echo $dom->saveXML();
źródło
Rozwiązanie Gumbo załatwia sprawę. Możesz pracować z simpleXml powyżej, a następnie dodać go na końcu, aby wyświetlić echo i / lub zapisać go z formatowaniem.
Poniższy kod odbija go i zapisuje do pliku (zobacz komentarze w kodzie i usuń wszystko, czego nie chcesz):
//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');
źródło
Służy
dom_import_simplexml
do konwersji na DomElement. Następnie użyj jego pojemności do sformatowania wyjścia.$dom = dom_import_simplexml($simple_xml)->ownerDocument; $dom->preserveWhiteSpace = false; $dom->formatOutput = true; echo $dom->saveXML();
źródło
documentElement
powinnoownerDocument
. Nie jestem pewien, czy interfejs API się zmienił, czy to tylko literówka. Poprawiłem to teraz.Jak odpowiedzieli Gumbo i Witman ; ładowanie i zapisywanie dokumentu XML z istniejącego pliku (jesteśmy tutaj bardzo nowicjuszami) za pomocą DOMDocument :: load i 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); } ?>
źródło