Ankündigung

Einklappen
Keine Ankündigung bisher.

XML File mit PHP modifizieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML File mit PHP modifizieren

    Hallo Leute

    Schonwieder ich. Hab mich jetzt ein wenig über die XML-Parsing Methoden schlau gemacht und hab ein kleines Script geschrieben, wie ich mein XML-File wunderbar parsen will. Das Script werden einige schon gesehen haben, wenn sie sich mit XML-Parsing beschäftigt haben. Ist relativ gängig:

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    /********************************************************/
    class Artikel    {
        protected 
    $parser;
        protected 
    $elemArr = array();

        public function 
    __construct()    {
            
    $this->parser xml_parser_create();

            
    xml_set_object($this->parser$this);
            
    xml_set_element_handler($this->parser'startElement''endElement');
            
    xml_set_character_data_handler($this->parser'characterData');
        }

        public function 
    __destruct()    {
            
    xml_parser_free($this->parser);
        }

        public function 
    readCatalog($catalog)    {
            
    xml_parse($this->parserfile_get_contents($catalog), true);
        }

        protected function 
    startElement($parser$element$attributes)    {
            
    array_push($this->elemArr$element);
        }

        protected function 
    endElement($parser$element)    {
            
    array_pop($this->elemArr);
        }

        protected function 
    characterData($parser$cdata)    {
            switch(
    $this->elemArr[sizeof($this->elemArr)-1])    {
                case 
    "DESC1":    $this->insert_more_data($cdata);    //Hier wird die Methode aufgerufen, mit welcher ich einen
                                
    break;                                //weiteren Wertesatz mit dem selben Wert einfügen möchte.
            
    }
        }

        function 
    insert_more_data($cdata)    {
            
        }
    }
    /********************************************************/
    /********************************************************/
    $artikel = new Artikel;

    $artikel->readCatalog("test.xml");
    /********************************************************/
    /********************************************************/
    ?>
    Das XML-File sieht folgendermassen aus:

    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Test>
    <Id>1</Id>
    <Title>Titel 1</Title>
    <Desc1>Das ist eine Beschreibung</Desc1>
    </Test>
    Nun fehlt es mir aber gänzlich an Ideen und Erfahrung, wie ich unter das <Desc1> ein <Desc2> mit dem selben Text "Das ist eine Beschreibung" bekomme. Gibts dafür geeignete Funktionen oder muss ich das File immer wieder neu schreiben? Man muss mir hier keine fertigen Lösungen präsentieren. Bin froh um jeden Denkanstoss.

    Gruss Igäl
    Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
    Mark Twain


  • #2
    Hab ich schonmal gesehen, jo, würde dir aber trotzdem die DOM-API ans Herz legen (zumal du ja eh scho objektorientiert angefangen hast ).

    Nun fehlt es mir aber gänzlich an Ideen und Erfahrung, wie ich unter das <Desc1> ein <Desc2> mit dem selben Text "Das ist eine Beschreibung" bekomme. Gibts dafür geeignete Funktionen oder muss ich das File immer wieder neu schreiben? Man muss mir hier keine fertigen Lösungen präsentieren. Bin froh um jeden Denkanstoss.
    Normalerweise (oop) in etwa so
    Code:
    $descChild = $xml->getChild ('Test')->getChild('Title')->getChild('Desc1');
    Ist laaange her, aber so oder so in der Art dürfte das Format gewesen sein
    Nicht jeder Fehler ist ein Bug.

    Kommentar


    • #3
      Naja das hab ich mir jetzt in ner Stunde zusammengebastelt/pastet und grösstenteils verstanden. Wenn mir dann was wärmstens empfohlen wird, dann kommts auf ne weitere Stunde büffeln auch nich an Nur muss ich mich dann wohl noch in die DOM-Struktur einlesen, nicht? Mach ich aber mal. Danke für den Tip

      Edit: Ich habe später ein XML mit 400k Zeilen. Habe gelesen das DOM sehr Speicherintensiv ist. Ist es für solch grosse Files also empfohlen mit DOM zu arbeiten? Das heisst etwa 70 Zeilen spezifizieren einen Artikel. Pro 70 Zeilen müsste ich also eine Zeile einschieben. Ist das realistisch?

      Edit 2: Hast du vlt einen Link auf ein mehr oder weniger fertiges Musterscript, das ich mir mal durchlesen und das nötige Nachschlagen kann? Ich hab jetzt mal die Theorie zu DOM duchgelesen, weiss aber nicht wie ich es in PHP anwenden soll.. is wohl einiges komplizierter als SAX ^^

      Edit 3: Wie soll ich validieren? Gegen RelaxNG, XML-Schema oder gegen das anscheinend Oldschool DTD? Ach herrje.. gibts den Stoff irgendwo n bissl gebündelt?
      Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
      Mark Twain

      Kommentar


      • #4
        Ist die Idee sehr schlecht, über das SAX API die Geschichte auszulesen, die benötigten Daten rauszufiltern und dann mit diesen Daten über die DOM API ein neues XML-File zu schreiben? Das wär jetzt so mein spontaner Ansatz nach ner Stunde einlesen
        Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
        Mark Twain

        Kommentar

        Lädt...
        X