SimpleXml

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallo,

    ich probier gerade mit SimpleXml rum und habe folgendes Problem.
    Der folgende else Zweig tritt ein wenn die XML datei nicht gefunden wird, sie soll dann erstellt und mit einem Grundgerüst gefüllt werden. (Das Gerüst ist grad nur zu Testzwecken, bleibt natürlich nciht so)


    Quellcode

    1. else {
    2. $strXml ="<?xml version='1.0'?>
    3. <".$strFilename.">
    4. <benutzer>
    5. </benutzer>
    6. </".$strFilename.">";
    7. $strXml= utf8_encode($strXml); // UTF-8 konform konvertieren
    8. $xml = simplexml_load_string($strXml); // XML Dokument erstellen
    9. }
    10. return $xml->asXML(); //Ausgabe des XML Dokuments...
    11. }
    Alles anzeigen


    So.. passieren tut aber nichts von beiden, also die xml datei wird weder erstellt noch gefüllt.

    Warum? :(

    Danke :)

    PS: Der Rückgabewert ist folglich auch leer...
  • 1. Keine Probleme
    Ich habe den code soeben ausgeführt:

    Quellcode

    1. <?php
    2. $strFilename = 'test';
    3. // Hier ohne xml-head, da der mit aufruf von asXML automatisch hinzugefügt wid.
    4. $strXml ="<".$strFilename.">
    5. <benutzer>
    6. </benutzer>
    7. </".$strFilename.">";
    8. $strXml= utf8_encode($strXml);
    9. $xml = simplexml_load_string($strXml);
    10. print_r($xml->asXML());
    11. ?>
    Alles anzeigen

    Und der XML code wird auch ausgegeben. Man kann ihn so aber nicht auf nem html-dokument sehen, da der browser die tags < und > für HTML-tags hält. Du musst dir also den quelltext des dokuments ansehen oder die tags nach htmlentities ausgeben.

    Quellcode

    1. print_r(htmlentities($xml->asXML(),ENT_QUOTES));



    2. Logischer Fehler / Syntax Fehler
    Die funktion simplexml_load_string() erstellt KEINE neue datei, sondern parst den string nur, um daraus eine klasse zu erstellen! Um das ganze in eine datei zu schreiben musst du fopen oder file_put_contents nutzen.

    Quellcode

    1. $xml = simplexml_load_string($strXml); // XML Dokument erstellen
    Funktioniert also alleine nicht.

    Quellcode

    1. <?php
    2. $strFilename = 'test';
    3. // Hier ohne xml-head, da der mit aufruf von asXML automatisch hinzugefügt wird.
    4. $strXml ="<".$strFilename.">
    5. <benutzer>
    6. </benutzer>
    7. </".$strFilename.">";
    8. $strXml= utf8_encode($strXml);
    9. $xml = simplexml_load_string($strXml);
    10. $fhandle = fopen('dateiname.xml','w');
    11. fwrite($fhandle,$xml->asXML());
    12. fclose($fhandle);
    13. ?>
    Alles anzeigen

    oder

    Quellcode

    1. <?php
    2. $strFilename = 'test';
    3. // Hier ohne xml-head, da der mit aufruf von asXML automatisch hinzugefügt wid.
    4. $strXml ="<".$strFilename.">
    5. <benutzer>
    6. </benutzer>
    7. </".$strFilename.">";
    8. $strXml= utf8_encode($strXml);
    9. $xml = simplexml_load_string($strXml);
    10. file_put_contents('dateiname.xml',$xml->asXML());
    11. ?>
    Alles anzeigen


    //Ungetestet und ohne fehlerbehandlung (fopen, file rechte, etc)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von GanjaLatte ()

  • Erstmal vielen vielen Dank für diese super Erläuterung! Echt klasse.

    Ich wage es daher auch kaum dich zu "verbessern" tue es aber der Nachwelt zur Liebe ;)
    Also mit file_set_contents klappt es nicht (kennt er nicht), nach ein bisschen rumgooglen hab ich herausgefunden das es file_put_contents() heißt.

    Dennoch nochmals vielen Dank für die spitzen Erklärung!!

    Thimo