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-Key: 293567

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

Printed on: April 18, 2024 at 00:04 o'clock

Mitglied: 122990
Solution 122990 Jan 19, 2016, updated at Jan 20, 2016 at 10:28:51 (UTC)
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
Member: H41mSh1C0R
H41mSh1C0R Jan 20, 2016 at 10:28:48 (UTC)
Goto Top
Danke dir.
Noch jemand der Gestern spät schlafen gegangen ist? *g*
Mitglied: 122990
122990 Jan 20, 2016 updated at 11:06:44 (UTC)
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 ....