2016-04-29 4 views
1

Я попытался с помощью ниже сценарияПреобразования в PowerShell словарь

$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) } 

он работал для меня, но это не решает полностью задачу как мой файл XML имеет различную конкретную среду информации. Может ли кто-нибудь предложить возможные решения для вышеуказанного требования в PowerShell версии 2.0?

Заранее спасибо.

ответ

0

Вы можете попробовать следующее выражение XPath для SelectNodes() параметра (например, для окружающей среды «UAT»):

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

XPath должен возвращать непустые текстовые узлы в соответствующей среде (см XPath demo).

+0

На самом деле я использовал приведенный ниже скрипт для преобразования словаря, '$ myDictionary = New-Object" System.Collections.Generic.Dictionary''2 [System.String, System.String] " $ xml = [xml] (Get-Content 'YOUR_PATH_HERE') $ xml.SelectNodes ("descendant :: node()") | ? Значение | % $ myDictionary.Add ($ _. ParentNode.ToString(), $ _. Value)} ' Могу ли я использовать' descendant :: environment [@ id = 'UAT']/descendant :: text() [normalize- space()] 'this в приведенном выше скрипте? – mahesh

+0

@mahesh Вот что я предложил, попробуйте заменить «descendant :: node()» в вашем коде XPath в этом ответе (я сам его не тестировал) – har07

+0

Он работает как ожидалось. Большое спасибо. – mahesh

Смежные вопросы