Zeilenumbruch in XML Datei nicht simpleXML

Moin,

vielleicht hast du den Hinweis auf DOMDocument in kuddeldaddeldu's 1. Posting überlesen.

Das, was du dort versuchst mit SimpleXML nachzubauen, ist in DOMDocument enthalten :)
Code:
$doc = new DOMDocument();
$doc->formatOutput = true;
..fertig :)

DOMDocument ist genauso wie SimpleXML in PHP5 enthalten und erfordert keine gesonderte Installation....bietet aber einen weitaus höheren Funktionsumfang als SimpleXML.
 
Zuletzt bearbeitet:
Genau. So hatte ich das ursprünglich gedacht. :)

@Karl: Hast Du vielleicht den neuesten Eintrag in den User Contributed Notes übersehen? Unter dem dort geposteten Link findest Du eine Funktion, die Du nur mit Deinem SimpleXMLElement und einem Pfad auf die Zieldatei füttern musst. Sieht vielversprechend aus... ;)

LG
 
Endlich hat es funktioniert! Vielen Dank für den zielführenden Tipp!

Hier nochmal mein Testcode
PHP:
function saveXMLFormatted( $xml, $filename ) {
// @param SimpleXMLElement $xml         SimpleXML object
// @param string           $filename    name of file to write output to
	$doc = new DOMDocument('1.0');
	$doc->preserveWhiteSpace = false;
	$doc->loadXML( $xml->asXML());
	$doc->formatOutput = true;
	file_put_contents( $filename, $doc->saveXML());
}

if (file_exists($rootRiegerweb.'/akte/china/galleries.xml')) {
	$xml = simplexml_load_file($rootRiegerweb.'/akte/china/galleries.xml');

// erzeuge neue gallery
	$gal = $xml->addChild('gallery');
	$gal->addAttribute('base', '../china/');
	$gal->addAttribute('file', 'test123.xml');
	$site = $gal->addChild('sitename', 'London');
	$graf = $gal->addChild('photographer', 'Karl');
	$contact = $gal->addChild('contactinfo', 'http://www.stangerweb.de');
	$email = $gal->addChild('email', 'kstanger@stangerweb.de');
	$secur = $gal->addChild('security', ' ');

// schreibe galleries
	saveXMLFormatted($xml, $rootRiegerweb.'/akte/china/galleries2.xml');
} else {
	exit('Konnte '.$rootRiegerweb.'/akte/china/galleries.xml nicht oeffnen.');
}

Hier die XML-Datei vorher
Code:
<galleries>
  <gallery base="../china/" file="photos.xml">
    <sitename>China</sitename>
    <photographer>Don Booth</photographer>
    <contactinfo>http://www.adobe.com</contactinfo>
    <email>dbooth@adobe.com</email>
    <security><![CDATA[]]> </security>
  </gallery>
  <gallery base="egypt/" file="photos.xml">
    <sitename>Egypt</sitename>
    <photographer>Don Booth</photographer>
    <contactinfo>http://www.adobe.com</contactinfo>
    <email>dbooth@adobe.com</email>
    <security><![CDATA[]]> </security>
  </gallery>
  <gallery base="paris/" file="photos.xml">
    <sitename>Paris</sitename>
    <photographer>Don Booth</photographer>
    <contactinfo>http://www.adobe.com</contactinfo>
    <email>dbooth@adobe.com</email>
    <security><![CDATA[]]> </security>
  </gallery>
</galleries>

und das XML-Ergebnis
Code:
<?xml version="1.0"?>
<galleries>
  <gallery base="../china/" file="photos.xml">
    <sitename>China</sitename>
    <photographer>Don Booth</photographer>
    <contactinfo>http://www.adobe.com</contactinfo>
    <email>dbooth@adobe.com</email>
    <security> </security>
  </gallery>
  <gallery base="egypt/" file="photos.xml">
    <sitename>Egypt</sitename>
    <photographer>Don Booth</photographer>
    <contactinfo>http://www.adobe.com</contactinfo>
    <email>dbooth@adobe.com</email>
    <security> </security>
  </gallery>
  <gallery base="paris/" file="photos.xml">
    <sitename>Paris</sitename>
    <photographer>Don Booth</photographer>
    <contactinfo>http://www.adobe.com</contactinfo>
    <email>dbooth@adobe.com</email>
    <security> </security>
  </gallery>
  <gallery base="../china/" file="test123.xml">
    <sitename>London</sitename>
    <photographer>Karl</photographer>
    <contactinfo>http://www.stangerweb.de</contactinfo>
    <email>kstanger@stangerweb.de</email>
    <security> </security>
  </gallery>
</galleries>
 
Hi, noch ein kleiner Tip: zum Konvertieren von SimpleXML in DOM gibt es eine Extrafunktion in PHP, nämlich dom_import_simplexml. Du könntest damit sicher Systemresourcen schonen, da das XML so nicht doppelt geparst werden muss:
PHP:
function saveXMLFormatted( $xml, $filename ) {
// @param SimpleXMLElement $xml         SimpleXML object
// @param string           $filename    name of file to write output to
    $doc = new DOMDocument('1.0');
    $doc->preserveWhiteSpace = false;
    $doc->formatOutput = true;

    $doc->appendChild($doc->importNode(dom_import_simplexml($xml), true));

    file_put_contents( $filename, $doc->saveXML());
}
 
Zurück