erainer
Goto Top

Powershell und XML Tag an bestimmter Stelle einfügen

Es geht um folgendes
wenn ich mein XML in eine Variable einlese z.B. in die Variable $XML wird ein XML das Wie folgt aussieht

<?xml version="1.0" encoding="UTF-8"?>
<Gruppentag1>
<tag1>Wert123</tag1>
<tag2>WertABC</tag2>
<tag3>Wert456</tag3>
<tag5>Wert789</tag5>
</Gruppentag1>
<Gruppe2>
<Untergruppe>
<tag1>

ich weis dass ich mit $new zB. das tag4 erzeugen kann aber mit appendChild auf der Gruppentag ebene

<Gruppentag1>
<tag1>Wert123</tag1>
<tag2>WertABC</tag2>
<tag3>Wert456</tag3>
<tag5>Wert789</tag5>
<tag4>WertDEF</tag4>
</Gruppentag1>

sieht es so aus

wie schaffe ich es jetzt das es wie folgt aussieht
<Gruppentag1>
<tag1>Wert123</tag1>
<tag2>WertABC</tag2>
<tag3>Wert456</tag3>
<tag4>WertDEF</tag4>
<tag5>Wert789</tag5>
</Gruppentag1>

muss ich dazu das XML Node für Node einlesen und auf eine 2. Variable umschreiben oder gibt es einen Befehl anders als appendChild der das <tag> an der korrekten Stelle einfügt
wie es ein etwaiges inkludiertes schema vorschreibt ???

Danke

Lg Rainer

Content-Key: 546848

Url: https://administrator.de/contentid/546848

Printed on: April 24, 2024 at 13:04 o'clock

Mitglied: 142970
142970 Feb 13, 2020 updated at 16:52:44 (UTC)
Goto Top
Auch kein Moin.

Dafür gibt's die Funktionen InsertAfter und InsertBefore
Beispiel:
# Beispiel XML Object erzeugen
$xml = [xml]@"  
<?xml version="1.0" encoding="UTF-8"?>  
<Gruppentag1>
    <tag1>Wert123</tag1>
    <tag2>WertABC</tag2>
    <tag3>Wert456</tag3>
    <tag5>Wert789</tag5>
</Gruppentag1>
"@  

# erstelle Element mit Inhalt
$newchild = $xml.CreateElement("tag4")  
$newChild.InnerText = "WertDEF"  

# Wähle den Referenzknoten mit XPath aus
$node = $xml.SelectSingleNode('/Gruppentag1/tag3')  

# füge den neuen Knoten nach dem Referenzknoten ein
$node.ParentNode.InsertAfter($newChild,$node) | out-null

# Gib nur zur Anschauung den XML Code aus
$xml.OuterXml
Member: ERainer
ERainer Feb 18, 2020 at 16:11:05 (UTC)
Goto Top
Danke an alle die geholfen haben das Problem zu lösen