XML mit PHP bearbeiten

  • Hi,
    ich versuche mittels PHP eine XML datei zu bearbeiten.
    Ich hab jetzt tagelang gegoogelt und alles mögliche Probiert und nichts funtzt.


    Ich kann das document auch einwandfrei ausgeben und alles, aber bearbeiten gleich null.


    Also erstmal die wichtigen daten:
    PHP 4 nicht PHP also kein simplexml.


    das XML document sieht folgendermaßen aus:
    <wurzel>
    <element1></element1>
    <element2 atrribut1></element2>
    </wurzel>


    Ich möchte nun die Element tags füllen sprich zwischen <element>und</element> was einfügen.


    Ich danke euch schonmal im vorraus.


    P.s. sollte der beitrag hier falsch sein (bin net richtig durchgestiegen) bitte ich einem admin es entsprechend zu schieben.

  • P.s. sollte der beitrag hier falsch sein (bin net richtig durchgestiegen) bitte ich einem admin es entsprechend zu schieben.



    Das Traum-Scripts ist nur für fertige Scripts und Schnipsel gedacht und nicht für Probleme oder Fragen. Deswegen habe ich den Thread mal in die richtige Rubrik verschoben. :)

  • scheint wirklich keine komfortable Möglichkeit zu geben, zumindest sagen das auch meine google treffer. Dann mach es doch mit den file operations von php.


    z.b. folgender maßen:


    • mittels [phpfunction]file[/phpfunction] das komplette File zeilenweise in ein Array parsen
    • die Array Inhalte auf <element> tags prüfen, z.b. mit [phpfunction]ereg[/phpfunction] bzw. wohl besser [phpfunction]preg_match[/phpfunction]
    • das Array bei Treffer bearbeiten
    • file mittels [phpfunction]fopen[/phpfunction] und 'w' zum schreiben öffnen und in einer Schleife mittels [phpfunction]fwrite[/phpfunction] Zeilenweise die Inhalte zurückschreiben
    • abschließend [phpfunction]fclose[/phpfunction]: das file handle schließen.


    Viele Grüße
    matthias

  • Wenns funtzt gerne allerdings wenn ich die funktion domxml_xmltree() verwende (was wie ichs verstanden haben nötig ist) erwartet der bei mir jedesmal nen start tag...was ich net so richtig verstehe.

  • So erstmal danke für eure Hilfe ich habs inzwischen mit DOMXML geschafft, allerdings ergibt sich direkt ein neues Problem. Ich möchte den Inhalt einzelner Knoten ausgeben und bekomme immer nur Object zurück.


    Code:
    $file="test.xml";
    $dom = domxml_open_file($file);
    $root = $dom->document_element();
    $search = xpath_new_context($dom);


    $questions = xpath_eval($search, "/wurzel/element[@id=\'$id\']/element");
    $question = $questions->nodeset[0];
    $question->get_content("Type");


    Wenn ich jetzt $echo $question mache bekomm ich die Ausgabe "Object".
    Hat wer ne idee?

  • Ja das element kann ich auch ansprechen mir gehts um die ausgabe das dort das Wort Object erscheint und nicht der eigentliche content.
    Abgesehn davon bräuchte ich dafür ne DTD die ich noch nicht habe.
    Aber danke

  • Also irgendwie steig ich durch das beispiel nicht durch, und ich möchte um ehrlich zu sein nicht unbedingt mit classes arbeiten. ich weiß das ich das schonmal geschafft habe.
    Geht das denn nicht mit xpath den knoten ansprechen und dann ausgeben?



  • Also erstmal die wichtigen daten:
    PHP 4 nicht PHP also kein simplexml.


    Also wie schon gesagt bearbeiten klappt inzwischen einwandfrei und nur bei der Ausgabe hackts. Ich hab übrigens auch kein Problem damit wenn der content in ein array oder eine variable geschrieben wird.

    Einmal editiert, zuletzt von Maxx88 ()

  • Also ich hab es jetzt geschafft mittels eines parsers alles auszugeben.
    Kann man den parser so mdoifizieren das er nur ein bestimmtes element ausgibt?


    Parser:


    function startElement($parser, $element_name, $element_attribute) {
    global $ausgabe;
    //Umwandeln in Kleinbuchstaben
    $element_name = strtolower($element_name);
    //Überprüfung des Elementnames
    if ($element_name=="Type") {
    $ausgabe .= "<h3>Inhalt</h3><p>";
    }
    }


    function endElement($parser, $element_name) {
    global $ausgabe;
    // in Kleinbuchstaben umwandeln
    $element_name = strtolower($element_name);
    // Überprüfung des Names eines Elementes
    if ($element_name=="Type") {
    $ausgabe .= "</p>";
    }
    }


    function cdata($parser, $element_inhalt) {
    global $ausgabe;
    // Der normale Text wird an $ausgabe angehängt
    $ausgabe .= $element_inhalt;
    }
    $xmlFile = file("$file");
    $parser = xml_parser_create();
    xml_set_element_handler($parser, "startElement", "endElement");
    xml_set_character_data_handler($parser, "cdata");


    foreach($xmlFile as $elem)
    {
    xml_parse($parser, $elem);
    }
    xml_parser_free($parser);
    echo $ausgabe;