XML Knoten löschen

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

  • XML Knoten löschen

    Hallo,

    vielleicht kann mir hier jemand helfen.
    Und zwar habe ich ein XML-Dokument mit der folgenden Struktur:

    PHP-Code:
    <?xml version="1.0"?>
    <eintraege>
        <eintrag>
            <ID>1</ID>
            <Name>Firma 1</Name>
            <www>URL1</www>
        </eintrag>
        <eintrag>
            <ID>2</ID>
            <Name>Firma 2</Name>
            <www>URL2</www>
        </eintrag>
        <eintrag>
            <ID>3</ID>
            <Name>Firma 3</Name>
            <www>URL3</www>
        </eintrag>
    </eintraege>
    Wie muss ich vorgehen, um z.B. den Eintrag mit der ID 2 zu löschen? Ich habe es schon mit DOM und removeChild probiert, aber irgendwie krieg ich nix hin.
    Es ist mir relativ wurscht, ob ich das mit DOM, simpleXML oder irgendwas anderem geregelt krieg, hauptsache es läuft .

    Also, ich wäre euch echt dankbar, wenn ihr mir helfen könnt.

    Besten Dank im Vorraus!
    Zuletzt geändert von reallife; 05.07.2005, 14:21.

  • #2
    Zeig doch mal den Code, dann kann man dir vllt. auch sagen, warum remove_child() nicht klappt.

    Kommentar


    • #3
      danke erstmal für deine Antwort.

      Das Problem ist, dass das bei mir alles etwas komplizierter ist und in ner Funktion läuft. Die Struktur der XML ist auch nur vom Prinzip her so wie die obere. Aber dennoch, ich poste mal die Funktion:

      PHP-Code:
      function Delete($katID$ID)
      {
          
      $fileName "ref_kat".$katID.".xml";
          
      $filePath "../Flash/data/";
          
      $file $filePath.$fileName;

          
      $doc DOMDocument::load($file);
          
      $xp = new domxpath($doc);
          
          
      $elements $doc->getElementsByTagName("eintrag"); 
          
      $element $elements->item(0);
          
          
      $children $doc->documentElement->childNodes->item($ID);
          
      $child $element->removeChild($children);

                      
          
      $doc->save($file);

      und hier die wirkliche XML-Struktur:

      PHP-Code:
      <?xml version="1.0"?>
      <referenzen>
          <eintrag>
              <ID>1</ID>
              <Firmenname>Firmenname1</Firmenname>
          </eintrag>
              <eintrag>
              <ID>2</ID>
              <Firmenname>Firmenname2</Firmenname>
          </eintrag>
              <eintrag>
              <ID>3</ID>
              <Firmenname>Firmenname3</Firmenname>
          </eintrag>
      </referenzen>
      Ich hoffe, du kannst damit was anfangen.
      Ich habe leider nicht wirklich viel Ahnung von PHP in Verbindung mit XML.

      Kommentar


      • #4
        Folgendes sollte funktionieren:
        PHP-Code:
        $doc DOMDocument::load($file);
        $xp = new DOMXPath($doc);

        $nodeList $xp->query(sprintf('eintrag[ID = "%s"]'$ID));//DOMXPath::query() liefert eine DOMNodeList zurück

        $nodeList->item(0)->parentElement->removeChild($nodeList); 
        Falls die XPath-Query mehr als einen Knoten liefern sollte, kann man die Liste ganz bequem mit einer for-Schleife und der Propery DOMNodeList::length durchlaufen und so alle betreffenden Knoten löschen.

        Siehe auch: http://de3.php.net/manual/en/functio...path-query.php
        "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

        Kommentar


        • #5
          Hey,

          vielen Dank auch dir für deine Hilfe!

          Ich werds gleich mal ausprobieren.

          Kommentar


          • #6
            Hm,
            habs grade mal ausprobiert und bekam diese Fehlermeldung:

            PHP-Code:
            Fatal errorCall to a member function removeChild() on a non-object in ...\functions.php on line 265 
            Kannst du mir nochmal helfen, das zu beheben?
            Oder hast du auch keine Idee, woran das liegt?

            Gruß

            Kommentar


            • #7
              Ach ja, kleiner Fehler. Es muss nicht parentElement sonder parentNode heißen (was man allerdings auch mit ein wenig Recherche auf php.net/dom hätte herausfinden können).

              Edit:
              Da war noch ein Fehler drin. Folgender Code ist richtig:
              PHP-Code:
              $doc DOMDocument::load($file);
              $xp = new DOMXPath($doc);

              $nodeList $xp->query(sprintf('eintrag[ID = "%s"]'$ID));//DOMXPath::query() liefert eine DOMNodeList zurück

              $nodeList->item(0)->parentNode->removeChild($nodeList->item(0)); 
              Zuletzt geändert von Nezzar; 05.07.2005, 17:19.
              "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

              Kommentar

              Lädt...
              X