2017-04-25 2 views
2

Ich habe eine XML-Datei "1.xml":Wie in Powershell einzelnes XML-Element erhalten

<configuration > 
    <application> 
    <name>My Application</name> 
    </application> 
    <log level="info" /> 
</configuration> 

und will von "My Application" auf "Namen von Powershell" text in Namen Knoten ändern . Ich kann es wie folgt tun:

$xml = [xml](Get-Content "1.xml"); 
$nameNode = $xml.configuration.application.ChildNodes.Item(0); 
$nameNode.InnerText = "Name from Powershell"; 

Aber ich weiß nicht, wie die Idee, den Knoten durch den Index zu erhalten. Ich möchte es mit Namen bekommen. Aber diese Varianten für mich nicht funktionieren:

$nameNode = $xml.configuration.application.name; 

$nameNode = $xml.SelectSingleNode("//configuration/application/name"); 

Gibt es eine einfache Art und Weise ein Element mit Namen in Powershell zu bekommen?

+3

'$ xml.configuration.application.name' funktioniert auf jeden Fall, und diese Einstellung auf einen neuen Wert ändert die Elementgehalte. Wenn es "nicht für Sie" funktioniert, müssen Sie genauer angeben, was nicht funktioniert. –

Antwort

2

Folgendes funktioniert für mich. Wie @ Jeroen sagte, müssen Sie genauer sein und ein ausführbares Skript zur Verfügung stellen, das anzeigt, was nicht funktioniert.

$xml = [xml]@" 
<configuration > 
    <application> 
    <name>My Application</name> 
    </application> 
    <log level="info" /> 
</configuration> 
"@ 

$xml.configuration.application.name # Outputs "My Application" 
$xml.configuration.application.name = "Test" 
$xml.configuration.application.name # Outputs "Test" 
+1

Lieven und @ Jeroen, Sie hatten Recht, '$ xml.configuration.application.name' funktioniert. Mein Fehler war: Ich dachte, es gibt ein Objekt mit Eigenschaften und versucht, Dinge wie folgt zu tun: '$ xml.configuration.application.name.InnerText =" Test "' – elshev

+0

war dort . –

Verwandte Themen