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,因此制作输出标签和将项目作为子项等建议无效。

我想要结束的本质上是一个字典,它将每个唯一的输出字符串映射到一个节点列表,这些节点的输出属性具有该字符串。

我可以通过迭代元素、在看到新的输出值时创建字典并在一个大循环中填充列表来手动执行此操作,但我很好奇:是否有更优雅的方式使用 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 回答