我在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标记和将Items设置为子代是无效的。
我最终想要得到的实际上是一个字典,该字典将每个唯一的Output字符串映射到具有该字符串的Output属性的节点列表。
我可以通过迭代元素,创建字典(如看到新的Output值)以及在大循环中填充列表来手动完成此操作,但我很好奇:是否可以使用PowerShell查询语法或XPath magic创建更优雅的方法这本字典?我最近一直在使用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>
'@
$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}


