1

PowerShell で解析している単純な XML ドキュメントがあり、属性値で要素をグループ化する必要があります。XML の構造は次のようになります。

<Root>
  <Items>
     <Item Input="Foo1" Output="Bin/A" />
     <Item Input="Foo2" Output="Bin/A" />
     <Item Input="Foo3" Output="Bin/B" />
     <Item Input="Foo4" Output="Bin/C" />
     <Item Input="Foo5" Output="Bin/A" />
  </Items>
</Root>

議論する価値のない理由により、XML を再フォーマットすることはできないため、Output タグを作成してアイテムを子として配置するなどの提案は有効ではありません。

最終的に作成したいのは、基本的に、それぞれの一意の出力文字列を、その文字列をその出力属性に持つノードのリストにマップする辞書です。

要素を反復し、新しい出力値が表示されたら辞書を作成し、大きなループでリストを埋めることで、これを手動で行うことができますが、私は興味がありました: PowerShell クエリ構文または XPath マジックを使用して作成するよりエレガントな方法はありますか?この辞書?私は最近 PowerShell クエリ構文を使用しており、多くの機能を備えていることがわかりました。このタスクはその範囲内ですか?

4

1 に答える 1

3

このようなものがうまくいくはずです:

$xml = [xml] @'
<Root>
  <Items>
     <Item Input="Foo1" Output="Bin/A" />
     <Item Input="Foo2" Output="Bin/A" />
     <Item Input="Foo3" Output="Bin/B" />
     <Item Input="Foo4" Output="Bin/C" />
     <Item Input="Foo5" Output="Bin/A" />
  </Items>
</Root>
'@

$grouped = $xml.Root.Items.Item | Group Output
$grouped 

与えます:

Count Name                      Group
----- ----                      -----
    3 Bin/A                     {Item, Item, Item}
    1 Bin/B                     {Item}
    1 Bin/C                     {Item}
于 2013-03-11T21:50:08.483 に答える