none
XML-Element an bestimmter Stelle einfügen RRS feed

  • Frage

  • Moin, moin.

    Bin XML-Neuling und brauch Hilfe. Ich würde gern einen XML-Node an einer bestimmten Stelle einfügen. Mit appendChild bekomme ich das über den Pfad immer nur an die letzte Position. Ich möchte aber an ein Element mit bestimmten Atribut einfügen.

    XML-Dokument:

    <ROOT>
       <REGIONS>
           <FIELD NAME="foo">
                <VALUE>
                     <TEXT>abcdef</TEXT>
                </VALUE>
           </FIELD>
           <FIELD NAME="bar">
                <VALUE>
                     <TEXT>abcdef</TEXT>
                </VALUE>
           </FIELD>
       </REGIONS>
    </ROOT>

    Ich würde gern ein neues Element "FIELD" nach FIELD NAME  ="foo" einfügen.

    Würde mich über einen Tipp sehr freuen.

    Danke und Gruß

    Martin


    • Bearbeitet XML-Neuling Samstag, 5. Oktober 2019 13:25
    Samstag, 5. Oktober 2019 13:25

Antworten

  • O.k., vielen Dank für den Tipp. Habs jetzt mit InsertAfter hinbekommen.

    Lösung lautet:

    $node = $xmlDocument.SelectSingleNode('//FIELD[@NAME="foo"]')
    
    $node.ParentNode.InsertAfter($newNode, $node)

    Bin kurz noch über das Atribut "name" gestolpert, das ist CASE INTENSIVE.

    Danke und Gruß

    Martin

    • Als Antwort markiert XML-Neuling Samstag, 5. Oktober 2019 15:41
    Samstag, 5. Oktober 2019 15:24

Alle Antworten

  • Moin,

    InsertBefore() und InsertAfter() sind Deine Freunde.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Samstag, 5. Oktober 2019 14:50
  • jepp, dachte ich mir schon. Was mir fehlt ist aber der Index des Knotens hinter dem ich dann einbinden möchte.

    Mit $xmlDocument.ROOT.REGIONS.FIELD komme ich ja nicht zum FIELD NAME = "foo".

    Samstag, 5. Oktober 2019 14:55
  • O.k., vielen Dank für den Tipp. Habs jetzt mit InsertAfter hinbekommen.

    Lösung lautet:

    $node = $xmlDocument.SelectSingleNode('//FIELD[@NAME="foo"]')
    
    $node.ParentNode.InsertAfter($newNode, $node)

    Bin kurz noch über das Atribut "name" gestolpert, das ist CASE INTENSIVE.

    Danke und Gruß

    Martin

    • Als Antwort markiert XML-Neuling Samstag, 5. Oktober 2019 15:41
    Samstag, 5. Oktober 2019 15:24
  • jepp, dachte ich mir schon. Was mir fehlt ist aber der Index des Knotens hinter dem ich dann einbinden möchte.

    Mit $xmlDocument.ROOT.REGIONS.FIELD komme ich ja nicht zum FIELD NAME = "foo".

    Doch, fast:

    $x = [xml](Get-Content C:\TEMP\test.xml)
    #entweder
    $x.ROOT.REGIONS.FIELD.Where({$_.NAME -eq "foo"})
    #oder
    $x.SelectSingleNode('ROOT/REGIONS/FIELD[@NAME = "foo"]')


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Samstag, 5. Oktober 2019 15:51