2016-04-29 6 views
1

Ich versuchte, das unter SkriptKonvertieren in Powershell-Wörterbuch

$myDictionary = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]" 
$xml = [xml] (Get-Content 'YOUR_PATH_HERE')  
$xml.SelectNodes("descendant::node()") | ? Value | % $myDictionary.Add($_.ParentNode.ToString(), $_.Value) } 

es für mich gearbeitet, aber es hat nicht löst die komplette Aufgabe als meine XML-Datei unterschiedliche umgebungsspezifische Informationen. Kann jemand eine mögliche Lösung für die obige Anforderung in PowerShell Version 2.0 vorschlagen?

Vielen Dank im Voraus.

Antwort

0

Sie können mit dem folgenden XPath-Ausdruck versuchen, für SelectNodes() Parameter (zB für ‚UAT‘ Umgebung):

descendant::environment[@id='UAT']/descendant::text()[normalize-space()] 

Die XPath sollten nicht leeren Textknoten in der geeigneten Umgebung (siehe XPath zurückkehren demo).

+0

Eigentlich war ich die unten stehende Skript für Wörterbuch Umwandlung verwenden, '$ myDictionary = New-Object "System.Collections.Generic.Dictionary''2 [System.String, System.String]" $ xml = [xml] (Get-Content 'YOUR_PATH_HERE') $ xml.SelectNodes ("descendant :: node()") | ? Wert | % $ myDictionary.Add ($ _. ParentNode.ToString(), $ _. Wert)} ' Kann ich' abcendant :: environment [@ id = 'UAT']/descendant :: text() [normalize- space()] das im obigen Skript? – mahesh

+0

@mahesh Das, was ich vorgeschlagen habe, versuchen, "Nachkommen" :: Knoten() 'in Ihrem Code mit XPath in dieser Antwort zu ersetzen (Ich habe es nicht selbst getestet) – har07

+0

Es funktioniert wie erwartet. Danke vielmals. – mahesh