h41msh1c0r
Goto Top

Powershell XML elemente hinzufügen

Hi@PS Profi's

Variante 1:
<?xml version="1.0" encoding="utf-8"?> 
<inhalt>
  <elements>
    <element name="Name1" value="Wert1" active="1" /> 
    <element name="Name2" value="Wert2" active="1" /> 
    <element name="Name3" value="Wert3" active="1" /> 
    <element name="Name4" value="Wert4" active="1" /> 
    <element name="Name5" value="Wert5" active="1" /> 
  </elements>
</inhalt>

Variante2:
<?xml version="1.0"?>  
<inhalt>
   <elements>
	<element>
        	<name> 1 </name>
		<value> Wert1 </value>
		<active> 1 </active>
	</element>
	<element>
		 <name> 2 </name>
	  	<value> Wert2 </value>
		<active> 1 </active>
	 </element>
  </elements>
</inhalt>

Was macht sich besser beim Zugriff auf die Elemente?

Variante 1 bekomme ich in die XML Datei geschrieben.
Variante 2 noch nicht, zumindestens wenn nicht nur 1 Element drin stehen soll.

$newelement = $xmlDoc.CreateElement('element')  
$elements = $xmlDoc.SelectSingleNode('//elements')  
$elements.AppendChild($newelement)
			
$newelement = $xmlDoc.CreateElement('name')  
$elements = $xmlDoc.SelectSingleNode('//element')  
$elements.AppendChild($newelement)

$newelement = $xmlDoc.CreateElement('value')  
$elements = $xmlDoc.SelectSingleNode('//element')  
$elements.AppendChild($newelement)

$newelement = $xmlDoc.CreateElement('active')  
$elements = $xmlDoc.SelectSingleNode('//element')  
$elements.AppendChild($newelement)

Wenn ich das richtig verstanden habe holt man sich mit SelectSingleNode element die erste Node, das würde das Verhalten erklären, das beim
2ten Lauf zwar ein neues Element angelegt wird, allerdings die Subnodes in die erste
element Node eingefügt werden.

Wie komme ich an die letzte element Node ran?

$newelement = $xmlDoc.CreateElement('name')  
$elements = $xmlDoc.SelectSingleNode('//element[last()]')  
$elements.AppendChild($newelement)

Endet in einer null-valued expression. ;(

Gruß vom H41mSh1C0r

Content-ID: 293567

Url: https://administrator.de/forum/powershell-xml-elemente-hinzufuegen-293567.html

Ausgedruckt am: 16.04.2025 um 10:04 Uhr

122990
Lösung 122990 19.01.2016, aktualisiert am 20.01.2016 um 11:28:51 Uhr
Goto Top
Völlig falsche herangehensweise mit dem ständigen Suchen der Nodes... Du solltest die Nodes alle erst erzeugen und zum Schluss an das Parent-Element "Elements" einhängen, dann brauchst du auch nicht das letzte Element erneut suchen...
$nodeElement = $xmlDoc.CreateElement('element')  
$nodeName  = $xmlDoc.CreateElement('name')  
$nodeValue = $xmlDoc.CreateElement('value')  
$nodeActive = $xmlDoc.CreateElement('active')  

$nodeElement.AppendChild($nodeName)
$nodeElement.AppendChild($nodeValue)
$nodeElement.AppendChild($nodeActive)

$elements = $xmlDoc.SelectSingleNode('/inhalt/elements')  
$elements.AppendChild($nodeElement)
Was macht sich besser beim Zugriff auf die Elemente?
Geht beides, ersteres spart Platz und ist kompakter.

Gruß grexit
H41mSh1C0R
H41mSh1C0R 20.01.2016 um 11:28:48 Uhr
Goto Top
Danke dir.
Noch jemand der Gestern spät schlafen gegangen ist? *g*
122990
122990 20.01.2016 aktualisiert um 12:06:44 Uhr
Goto Top
Zitat von @H41mSh1C0R:
Noch jemand der Gestern spät schlafen gegangen ist? *g*
Nope, bei mir war es hier 11:30, ich sitze auf der anderen Seite der Erdkugel face-smile Jetzt ist es bei mir Geisterstunde ....