2016-04-30 3 views
1

Я пытаюсь создать словарь с помощью PowerShell. Ниже файл XML,convert inner xml to powershell

и я работаю над следующим кодом,

$env = "Test" 
$myDictionary = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]" 
$xmlfile = [xml] (Get-Content "file-name") 
$xmlfile.SelectNodes("descendant::configuration/environment[@id='$($env)']/descendant::text()[normalize-space()]") | ? Value | % { $myDictionary.Add($_.ParentNode.ToString(), $_.Value) } 

Я хочу, чтобы мой вывод следующим образом,

Key   Value 
----   ----- 
smtpserver  smtp1.org 
type   test 
encryption  <add key ="DB1" value="mhu0VrvzBBlYjPbxh+EQk0zdY"/> 
       <add key ="DB2" value="DVvHAq2EVKF5fmYYiUUJ/g=="/> 
       <add key="DB3" value="dkcdowefnwlwkli/" /> 

Я хочу, чтобы включить внутреннюю часть XML в Словарь. Может ли кто-нибудь предложить возможные решения для вышеуказанного требования?

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

ответ

3

Я бы предложил использовать следующий XPath, который будет возвращать всех прямые элементов дочерних сопоставившейся <environment>:

//configuration/environment[@id='target_id_here']/* 

И затем использовать $myDictionary.Add($_.ToString(), $_.InnerXml) добавить имени и внутренний XML пару каждого элемента в словарь.


Демо:

PS C:\Users\har07> $xml = [xml]@" 
>> <configuration> 
>> <environment id="Test"> 
>>  <smtpserver>smtp1.org</smtpserver> 
>>  <type>test</type> 
>>  <encryptioninfo> 
>>  <add key ="DB1" value="mhu0VrvzBBlYjPbxh+EQk0zdY"/> 
>>  <add key ="DB2" value="DVvHAq2EVKF5fmYYiUUJ/g=="/> 
>>  <add key="DB3" value="dkcdowefnwlwkli/" /> 
>>  </encryptioninfo> 
>> </environment> 
>> </configuration> 
>> "@ 
PS C:\Users\har07> $env = "Test" 
PS C:\Users\har07> $myDictionary = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]" 
PS C:\Users\har07> $xml.SelectNodes("//configuration/environment[@id='$($env)']/*") | % { $myDictionary.Add($_.ToString(), $_.InnerXml) } 
PS C:\Users\har07> $myDictionary 

Key   Value 
---   ----- 
smtpserver  smtp1.org 
type   test 
encryptioninfo <add key="DB1" value="mhu0VrvzBBlYjPbxh+EQk0zdY" /><add key="DB2" value="DVvHAq2EVKF5fmYYiUUJ/g==" />... 
+0

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