Jo: xml in "Menschen-lesbare Form"

Hallo,
ich erzeuge neue Objekte in XML-Files mit SimpleXML:

  
//Objekt hinzufügen  
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertform")) {  
	$field = $xmlobj->addChild("field");  
	$field->addChild("name", "$_POST[name]");  
	$field->addChild("title", "$_POST[title]");  
	$field->addChild("desc", "$_POST[desc]");  
  
	$handle = fopen($xmlfile, "wb");  
	fwrite($handle, $xmlobj->asXML());  
	fclose($handle);  
}  

Der erzeugte File läuft wunderbar, allerdings stehen alle Einträge in einer Zeile und das XML-File sollte in einer lesbaren Form ausgegeben werden falls ihn jemand mit einem Editor öffnet.
Dazu habe ich folgende Pear-Klasse gefunden:
http://pear.php.net/package/XML_Beautifier/redirected

Leider ist auf einigen Zielservern Pear nicht installiert, gibt es eine andere Möglichkeit einen XML-File der mit Simple-XML erzeugt wurde in eine "Menschen-lesbare Form" zu bringen?
Danke + Gruß
Jo

  1. Hi!

    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "insertform")) {
    $field->addChild("name", "$_POST[name]");

    Nimm die Schreibweise der ersten Zeile, dann greift PHP direkt auf den Inhalt des $_POST-Eintrags zu, ohne erst noch überflüssige String-Operationen damit auszuführen.

    Der erzeugte File läuft wunderbar, allerdings stehen alle Einträge in einer Zeile und das XML-File sollte in einer lesbaren Form ausgegeben werden falls ihn jemand mit einem Editor öffnet.

    http://de.php.net/manual/en/simplexmlelement.asXML.php#85340

    Leider ist auf einigen Zielservern Pear nicht installiert,

    Das ist kein Problem, denn PEAR muss man nicht unbedingt installieren. Es reicht, wenn du alle benötigten Dateien deinem Projekt hinzufügst. Das ist im Prinzip auch die empfehlenswertere Variante, denn dann weißt du wenigstens, dass es eine Version ist, mit der du die Funktionalität getestet hast und nicht irgendeine veraltete oder nicht mehr kompatible neuere Version.

    Lo!

  2. Moin Moin!

    Der erzeugte File läuft wunderbar, allerdings stehen alle Einträge in einer Zeile und das XML-File sollte in einer lesbaren Form ausgegeben werden falls ihn jemand mit einem Editor öffnet.

    Nimm einen Editor, der mit XML umgehen kann ... ;-)

    Wenn man es ganz genau nimmt, erzeugt zusätzlich eingefügter Whitespace ein anderes Dokument als die Originalversion.

      
    <foo><bar /></foo>  
    
    

    ... ist ein foo-Element, dass ein (leeres) bar-Element enthält.

      
    <foo>  
      <bar />  
    </foo>  
    
    

    ... ist ein foo-Element, dass ein Textelement mit Zeilenumbruch und Spaces, ein leeres bar-Element, und ein weiteres Textelement mit Zeilenumbruch enthält.

    Ob der lesende XML-Parser bzw. die dahinter liegende Software sich daran stört, ist natürlich eine andere Frage.

    Problematisch wird es, wenn das Pretty Printing zusätzlichen White Space zu relevanten Whitespace hinzufügt.

      
    <p>Foo <b>bar</b> baz</p>  
    
    

    vs.

      
    <p>  
      Foo  
      <b>  
        bar  
      </b>  
      baz  
    </p>  
    
    

    An dieser Stelle stumpf allen Whitespace wegzuwerfen führt einem kaputten Dokument, denn den irrelevanten Pretty-Print-Whitespace kann man nicht mehr vom Whitespace unterschieden, der ins Dokument gehört.

      
    <p>Foo<b>bar</b>baz</p>  
    
    

    Randbemerkung:

    JSON hat solche Probleme nicht, dort haben Strings klare, eindeutige Grenzen, außerhalb derer man so viel Whitespace einfügen kann wie man will, ohne Gefahr zu laufen, das Dokument zu beschädigen. Außerdem ist JSON wesentlich kompakter als das sich ewig wiederholende XML.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".