XML Knoten löschen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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!
    Last edited by reallife; 05-07-2005, 13:21.

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

    Comment


    • #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.

      Comment


      • #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

        Comment


        • #5
          Hey,

          vielen Dank auch dir für deine Hilfe!

          Ich werds gleich mal ausprobieren.

          Comment


          • #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ß

            Comment


            • #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)); 
              Last edited by Nezzar; 05-07-2005, 16:19.
              "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

              Comment

              Working...
              X