Benutzer mit den meisten Antworten
XML-Element an bestimmter Stelle einfügen

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
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
Alle Antworten
-
Moin,
InsertBefore() und InsertAfter() sind Deine Freunde.
Evgenij Smirnov
-
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
-
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