2017-01-27 13 views
0

foreachループを使用してアイテムをコレクションに追加するXMLファイルから値を解析しようとしていて、そのコレクションのアイテムを別のforeachループを使用して別のコレクションに追加します。 、その後、私はこれを修正することができますどのように、私は同じ項目ごとに追加していためであると考えエラー"Item has already been added. Key in dictionary: 'System.Collections.Hashtable' Key being added: 'System.Collections.Hashtable'"を与えるpowershellどのように項目を辞書に追加し、そのリストの項目を別の辞書に追加するのですか?

[xml]$testResults = Get-Content -Path $testResultsPath 
$resultsByName = @{} 
$resultsByPhone = @{} 
$loop = 0 
foreach($testCase in $testResults.'test-results'.'test-suite') 
{ 
    foreach($testCase in $testResults.'test-results'.'test-suite'[$loop].'results'.'test-suite'.'results'.'test-suite'.'results'. 
    'test-suite'.'results'.'test-suite'.'results'.'test-suite'.'results'.'test-suite'.'results'.'test-case') 
    { 
    $NameWithPone = $testCase.name.ToUpper().Substring($testCase.name.LastIndexOf('.')+1); 
    $Name =$NameWithPone.Substring(0, $NameWithPone.IndexOf('_')); 
    $PhoneVersion = $testCase.name.Substring($testCase.name.IndexOf('_')+1); 
    $resultsByName.Add($PhoneVersion, $Name) 
     Foreach($resultCase in $resultsByName) 
     { 
      $resultsByPhone.Add($resultsByName, $testCase.result) 
     } 
    } 
$loop++ 
} 

をしかし、これは唯一それを最初の結果を追加します。これは私がこれまでやっている何ですか?

google_pixel_xl-7_1_1   TESTTHATAREGISTEREDUSERCANLOGINTOTHECUSTOMERAPPSUCCESSFULLY     
htc_10-6_0_1     TESTTHATAREGISTEREDUSERCANLOGINTOTHECUSTOMERAPPSUCCESSFULLY     
oneplus_one-4_4_4    TESTTHATAREGISTEREDUSERCANLOGINTOTHECUSTOMERAPPSUCCESSFULLY 

しかし、私は次のようになり、別のコレクションに一緒に両方の値を追加したい:

最初のコレクションは次のようになります。私は、このことによって行わしまった

google_pixel_xl-7_1_1 TESTTHATAREGISTEREDUSERCANLOGINTOTHECUSTOMERAPPSUCCESSFULLY Error

+0

あなたは '$ループループの末尾にあるループ –

+0

これを追加するのを忘れてしまった –

答えて

0

これは:

[xml]$testResults = Get-Content -Path $testResultsPath 
foreach($testCase in $testResults.'test-results'.'test-suite') 
{ 
    function Get-TestCases($myResults) 
    { 
     $testCases = @() 
     foreach($child in $myResults.ChildNodes) 
     { 
      if($child.'test-case' -eq $null) 
      { 
       foreach($testCase in Get-TestCases $child) 
       { 
        $testCases += $testCase  
       } 
      } 
      else 
      { 
       $testCases += $child.'test-case' 
      } 
     } 
     return $testCases 
    } 
    $tests = Get-TestCases $testResults.'test-results'.'test-suite'[$loop] 
    foreach($test in $tests) 
    { 
     $PhoneVersion = $test.name.Substring($test.name.IndexOf('_')+1); 

     $resultsByPhone.Add($PhoneVersion, @{}) 
     $NameWithPhone = $test.name.ToUpper().Substring($test.name.LastIndexOf('.')+1);  
     $Name =$NameWithPhone.Substring(0, $NameWithPhone.IndexOf('_')); 

     $resultsByPhone[$phoneVersion].Add($Name, $test.result)   


    } 
    $resultsByPhone[$phoneVersion] 
    $resultsByPhone 
    $loop++ 
} 
関連する問題