2016-05-13 12 views
0

Ich habe folgendes xml:Wählen Sie XML-Knoten aus einem Namespace Powershell mit

<?xml version="1.0" encoding="utf-8"?> 
<userSettings> 
    <setting name="TelephonyServerHost"> 
    <value>sipserver.domain.local</value> 
    </setting> 
    <setting name="SipServerFqdn"> 
    <value>sipserver.domain.local</value> 
    </setting> 
    <setting name="WebServicesHost"> 
    <value>websvc.domain.local</value> 
    </setting> 
    <setting name="KMSettings"> 
    <value> 
     <KMIndexSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <AutoIndexEnabled>false</AutoIndexEnabled> 
    </KMIndexSettings> 
    </value> 
    </setting> 
</userSettings> 

Ich bin in der Lage, die Werte der Stellelemente abrufen XPath, aber ich kann nicht die korrekte Syntax für die Abfrage des AutoIndexEnabled Element heraus den Namespace verwenden.

Dies funktioniert wie für das Lesen der KMSettings oder anderen Knoten zu erwarten, die keine Namensraum haben:

$xml = New-Object -TypeName 'System.XML.XMLDocument' 
$xml.Load($xmlFilePath) 
$node = $xml.SelectSingleNode("//userSettings/setting[@name='KMSettings']") 

Aber ich kann nicht herausfinden, die Syntax, wie das AutoIndexEnabled Element abzufragen.

+0

Ich bin kein Benutzer Powershell, so wird mit der Powershell nicht helfen können, zu Spezifische Syntax, aber in Bezug auf das XML-Element befindet sich das AutoIndexEnabled-Element im xsi-Namespace. Daher sollten Sie die Funktionen von PowerShell verwenden, um auf den Namespace und dann auf die Knoten in diesem Namespace zuzugreifen. Bei einer schnellen Suche habe ich [diese Antwort] (http://stackoverflow.com/questions/25566269/select-an-attribute-with-xpath-in-a-xml-with-namespace-using-powershell) gefunden sieht aus wie Ihr Problem –

Antwort

1

Ich verstehe das Problem nicht. Die Namespaces spielen hier keine Rolle, da Ihr XML-Beispiel keine vorangestellten Elemente oder einen Standardnamespace enthält. Sie können das Element wie folgt zugreifen:

$xml.SelectNodes("//AutoIndexEnabled") 

oder

$xml.SelectNodes("//setting[@name='KMSettings']//AutoIndexEnabled") 

Ausgang:

#text 
----- 
false 

PS> $xml.SelectNodes("//AutoIndexEnabled").InnerText 
false 
+0

Danke. Ich wurde mit der XPath-Syntax verwirrt. – kr0me

0

Innerhalb Powershell können Sie XML-Knoten wie Eigenschaften zuzugreifen, so funktioniert das:

($xml.DocumentElement.setting | ? name -eq 'KMSettings').value.KMIndexSettings.AutoIndexEnabled 

Und hier ist eine Arbeits XPATH Lösung:

[string]$xpath="//userSettings/setting[@name='KMSettings']/value/KMIndexSettings/AutoIndexEnabled"  
$xml.SelectSingleNode($xpath) 
+0

Hat sich die Probe geändert? Ich kann keinen SOAP-Namespace sehen und benutze ihn nicht einmal in deinem XPath ..: S –

+1

Upps, du hast Recht @FrodeF. Ich habe die Lösung einfach von einer vorherigen Antwort kopiert. Danke für den Tipp! –

+0

Danke, dein XPath hat geholfen. – kr0me