Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Element in XML mit XPath löschen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Element in XML mit XPath löschen

    Hallo zusammen

    Ich möchte in einer XML Datei abängig vom Inhalt eines Element das ganze "Eltern-Element" löschen. Zur Erklährung folgender Beispielcode.

    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <gruppen>
    <gruppe>
    <name>name1</name>
    </gruppe>
    <gruppe>
    <name>name2</name>
    </gruppe>
    </gruppen>
    PHP-Code:
    <?php 
    $xml 
    simplexml_load_file("test.xml");

    $path="/gruppen/gruppe[name='name2']";
    $result $xml->xpath($path);

    unset(
    $result[0]->name);
    echo 
    $xml->asXML("test.xml");
    ?>
    Mit dem Programm wird das Element
    Code:
    <name>name2</name
    gelöscht.

    Nun möchte ich das Programm dazu bringen dass die ganze Gruppe mit dem gesuchten Element gelöscht wird.
    Code:
    <gruppe>
    <name>name2</name>
    </gruppe>
    -> soll also gelöscht werden.

    Ich bringe es einfach immer wieder so weit, dass alle Elemente gelöscht werden, aber immer bleibt mir die leere Gruppe stehen. Kann ich den XPath Ausdruck irgendwie anpassen?

    Besten Dank

  • #2
    http://stackoverflow.com/questions/2...plexml-for-php

    bzw:
    PHP-Code:
    <?php
    $str 
    =
    '<?xml version="1.0" encoding="ISO-8859-1"?>
    <gruppen>
    <gruppe>
    <name>name1</name>
    </gruppe>
    <gruppe>
    <name>name2</name>
    </gruppe>
    </gruppen>'
    ;

    $xml simplexml_load_string($str);
    print_r($xml);
    /*
    SimpleXMLElement Object 

        [gruppe] => Array 
            ( 
                [0] => SimpleXMLElement Object 
                    ( 
                        [name] => name1 
                    ) 

                [1] => SimpleXMLElement Object 
                    ( 
                        [name] => name2 
                    ) 
            ) 

    */

    foreach ($xml->gruppe as $gruppe) {
        if (
    $gruppe->name == 'name2') {
          unset(
    $gruppe[0]);
          break;
        }
    }

    print_r($xml);

    /*
    SimpleXMLElement Object
    (
        [gruppe] => SimpleXMLElement Object
            (
                [name] => name1
            )
    )*/
    bzw. du verwendest direkt DOMDocument. http://php.net/manual/de/class.domdocument.php

    LG

    Kommentar


    • #3
      Danke für den Hinweis.
      Habe es mit wie in Deinem Link beschrieben umgesetzt.
      PHP-Code:
      $xml simplexml_load_file("test.xml");

      $path="/gruppen/gruppe[name='name2']";
      $result $xml->xpath($path);

      $dom=dom_import_simplexml($result[0]);
              
      $dom->parentNode->removeChild($dom);

      echo 
      $xml->asXML("test.xml"
      Habe es getestet und klappt mit diesen zwei Zeilen. (Vereinfachend kommt bei meiner Anwendung hinzu, dass ich sicher bin, dass der XPath nur einen Treffer liefert...)
      Nochmals Merci für die Hilfe!

      Kommentar

      Lädt...
      X