simon: unterschied zw simplexmlelement und xmlparser?

hallo ,

gibt es eig einen unterschied zwischen simplexmlelement und xmlparser funktionen -> http://us.php.net/manual/de/ref.xml.php

oder anderst, was kann xml parser, was simplexml nicht kann!

bitte hilft mir, ich verzweifle
simon

  1. Naja, simplexml ist eine vordefinierte Klasse. So erlese ich das zumindest aus: http://us.php.net/manual/de/ref.simplexml.php Der Parser eine Funktionsgruppe. Ich denke mal, dass SimpleXML sogar auf diesen aufbaut.

    1. ja aber kann man auch mit xml parser xml elemente löschen? mit simplexml geht sda ja nicht. wie kann ich denn sowas machen?

      Naja, simplexml ist eine vordefinierte Klasse. So erlese ich das zumindest aus: http://us.php.net/manual/de/ref.simplexml.php Der Parser eine Funktionsgruppe. Ich denke mal, dass SimpleXML sogar auf diesen aufbaut.

      1. Natürlich geht das. Also innerhalb des Objektes. Sieh dir zu dem Zweck doch einfach mal die Klassen XMLReader und XMLWriter an. (http://us.php.net/manual/de/ref.xmlreader.php)

  2. Hallo simon.

    gibt es eig einen unterschied zwischen simplexmlelement und xmlparser funktionen -> http://us.php.net/manual/de/ref.xml.php

    Bei den XML-Parserfunktionen musst du eigene Callback-Funktionen schreiben, die beim Auftreten verschiedener Ereignisse (Element geöffnet, Anfang einer Zeichenkette, etc.) aufgerufen werden. Hiermit hast du also eine ganze Menge an Gestaltungsfreiheit bezüglich der XML-Verarbeitung.

    Simplexml hingegen konvertiert ein XML-Dokument in ein fix und fertiges Objekt, welches du wie gewohnt durchlaufen und auf Werte darin zugreifen kannst. Die Bearbeitungsmöglichkeiten sind hier massiv eingeschränkt, doch zum Auslesen von XML-Dokumenten reicht dies allemal.

    Die von mir bevorzugte Möglichkeit mit mittlerem Aufwand sind die DOM-Methoden. Das XML-Dokument wird hierbei als baumartige Anordnung von Knoten verschiedenster Art angesehen und auch so bearbeitet. Bezüglich Veränderung des Dokumentenbaumes gibt es hier praktisch keine Einschränkungen.

    Einen schönen Dienstag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. hallo mathias ,

      vielen dank schonmal!

      bei den dom funktionen steht ja viele sachen, DomDocument, DomComment usw. ich denke mal, domdocument ist für das gesamte dokument und dann muss ich für die einzelnen elemente immer was anderes nehmen?

      wäre super wenn du mir mal einen beispiel posten würdest mit code für so eine einfache xml datei. und dann mal als beispiel wie man da mit diesen dom funktionen was ausliest und löscht und verändert.

      danke!
      simon

      Hallo simon.

      gibt es eig einen unterschied zwischen simplexmlelement und xmlparser funktionen -> http://us.php.net/manual/de/ref.xml.php

      Bei den XML-Parserfunktionen musst du eigene Callback-Funktionen schreiben, die beim Auftreten verschiedener Ereignisse (Element geöffnet, Anfang einer Zeichenkette, etc.) aufgerufen werden. Hiermit hast du also eine ganze Menge an Gestaltungsfreiheit bezüglich der XML-Verarbeitung.

      Simplexml hingegen konvertiert ein XML-Dokument in ein fix und fertiges Objekt, welches du wie gewohnt durchlaufen und auf Werte darin zugreifen kannst. Die Bearbeitungsmöglichkeiten sind hier massiv eingeschränkt, doch zum Auslesen von XML-Dokumenten reicht dies allemal.

      Die von mir bevorzugte Möglichkeit mit mittlerem Aufwand sind die DOM-Methoden. Das XML-Dokument wird hierbei als baumartige Anordnung von Knoten verschiedenster Art angesehen und auch so bearbeitet. Bezüglich Veränderung des Dokumentenbaumes gibt es hier praktisch keine Einschränkungen.

      Einen schönen Dienstag noch.

      Gruß, Mathias

      1. Wie wäre es mit den schon vorhandenen Beispielen und Anwendungen auf http://de.php.net/manual/de/ref.domxml.php ?
        Wie dort aber auch geschrieben steht sind diese Funktionen bisher experimentell. Das heißt auf deinem Server muss unbedingt eine aktuelle PHP-Version aktualisiert sein und bei weiteren aktualisierungen kann sich das Verhalten schnell wieder ändern.

        1. Hallo Rafael.

          Wie wäre es mit den schon vorhandenen Beispielen und Anwendungen auf http://de.php.net/manual/de/ref.domxml.php ?

          Vorsicht: DOM XML != DOM. Ersteres ist erstens mächtig veraltet und bietet auch viel zu wenige Möglichkeiten der Ver- und Bearbeitung von XML-Dokumenten. Man sollte diese Methoden vielleicht allerhöchstens dann nutzen, wenn man nur PHP4 zur Verfügung stehen hat und einen eigenen Parser zu schreiben zu viel Aufwand bedeutet.

          Wie dort aber auch geschrieben steht sind diese Funktionen bisher experimentell. Das heißt auf deinem Server muss unbedingt eine aktuelle PHP-Version aktualisiert sein und bei weiteren aktualisierungen kann sich das Verhalten schnell wieder ändern.

          Ja, sie könnten zum Beispiel gänzlich aus dem Sprachbestand PHPs verschwinden.

          Einen schönen Dienstag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
      2. Hallo simon.

        bei den dom funktionen steht ja viele sachen, DomDocument, DomComment usw. ich denke mal, domdocument ist für das gesamte dokument und dann muss ich für die einzelnen elemente immer was anderes nehmen?

        Nenne es hier besser „Objekte“, da der Begriff „Elemente“ bereits in XML vergeben ist. (<foo></foo> wäre ein Element, <bar/> ebenso.)

        wäre super wenn du mir mal einen beispiel posten würdest mit code für so eine einfache xml datei.

        Siehe dazu DOMDocument.

        und dann mal als beispiel wie man da mit diesen dom funktionen was ausliest

        Dazu dient die nodeValue-Eigenschaft des DOMNode-Objekts.

        und löscht

        Mit Hilfe der removeChild-Methode.

        und verändert.

        Dies hängt davon ab, was du zu ändern gedenkst. Elemente werden zuerst erzeugt und danach ins Dokument eingehängt. Attribute dagegen werden direkt an ein bestehendes oder erzeugtes Element gekoppelt. Elementinhalte kannst du ganz einfach über die bereits genannte nodeValue-Eigenschaft bearbeiten.

        Zusammenfassend hier nun einmal ein Beispiel:

        <?php  
          
        error_reporting(E_ALL);  
        header('content-type: text/plain; charset=utf-8');  
          
        $str_doc = '<?xml version="1.0" encoding="utf-8"?>  
        <wurzel>  
          <kind attribut="wert">Text</kind>  
        </wurzel>';  
          
        // Dokumentenobjekt initialisieren  
        $obj_doc = new DOMDocument('1.0', 'utf-8');  
        // Saubere Formatierung  
        $obj_doc->[link:http://de.php.net/manual/de/ref.dom.php#dom.class.domdocument.properties@title=preserveWhiteSpace] = false;  
        $obj_doc->formatOutput = true;  
        // Obigen String ins Objekt laden  
        $obj_doc->loadXML($str_doc);  
          
        // Neues Elementobjekt erzeugen und Attributwert setzen  
        $obj_child = $obj_doc->createElement('kind', 'Anderer Text');  
        $obj_child->setAttribute('attribut', 'anderer wert');  
        $obj_doc->documentElement->appendChild($obj_child);  
          
        // Erstes Objekt vom Elementnamen „kind“ holen  
        $obj_firstchild =  $obj_doc->[link:http://de.php.net/manual/de/function.dom-domdocument-getelementsbytagname.php@title=getElementsByTagName]('kind')->item(0);  
        // Wert des Attributes „attribut“ ausgeben  
        echo 'Attributwert des ersten Elements: „',  
          $obj_firstchild->[link:http://de.php.net/manual/de/function.dom-domelement-getattribute.php@title=getAttribute]('attribut'), "“\n\n"; // „wert“  
          
        // Erstes Objekt aus dem Dokument entfernen  
        $obj_firstchild->[link:http://de.php.net/manual/de/ref.dom.php#dom.class.domnode.properties@title=parentNode]->removeChild($obj_firstchild);  
          
        echo $obj_doc->saveXML();  
        /*  
        <?xml version="1.0" encoding="utf-8"?>  
        <wurzel>  
          <kind attribut="anderer wert">Anderer Text</kind>  
        </wurzel>  
        */  
          
        ?>
        

        Es ist nicht schlimm wenn dir die verschiedenen Eigenschaften und Methoden jetzt noch kaum etwas sagen; wenn du dich einmal mit DOM richtig befasst hast, wirst du es sehr zu schätzen wissen.

        Hallo simon.

        Und bitte zitiere vernünftig.

        Einen schönen Dienstag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules