2016-04-30 11 views
1

PowerShellを使用して辞書を作成しようとしています。 xmlファイルがされた後、inner xmlを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

私はすべての直接の子要素に一致<environment>返される、次のXPathを使用することをお勧めしたい:

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

をし、各要素の名と内部XMLのペアを追加するために$myDictionary.Add($_.ToString(), $_.InnerXml)を使用辞書に


デモ:

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

関連する問題