【问题标题】:Grouping , sorting and sum based on XML attribute基于XML属性的分组、排序和求和
【发布时间】:2018-02-08 06:45:48
【问题描述】:

我有像下面这样的 XML 并且想要像 . 如何编写 powershell 脚本以获得所需的输出

<onds>
  <ond oc="AF" o="DXB" dc="GB"  ds="London Heathrow" dfs="london-heathrow" tp="0" />
  <ond oc="AE" o="DXB" dc="KW"  ds="Kuwait" dfs="kuwait" tp="619730" />
  <ond oc="AE" o="DXB" dc="PK"  ds="Karachi" dfs="karachi" tp="1" />
  <ond oc="AE" o="DXB" dc="IN"  ds="Mumbai" dfs="mumbai" tp="465861" />
  <ond oc="AE" o="DXB" dc="LB"  ds="Beirut" dfs="beirut" tp="366572" />
  <ond oc="AU" o="ADL" dc="GB"  ds="London Heathrow" dfs="london-heathrow" tp="0" />
  <ond oc="AU" o="ADL" dc="GB"  ds="Manchester" dfs="manchester" tp="2" />
  <ond oc="AU" o="ADL" dc="IT"  ds="Rome" dfs="rome" tp="11978" />
  <ond oc="AU" o="ADL" dc="FR"  ds="Paris" dfs="paris" tp="10878" />
  <ond oc="AU" o="ADL" dc="GB"  ds="London Gatwick" dfs="london-gatwick" tp="1" />
  <ond oc="AU" o="ADL" dc="IE"  ds="Dublin" dfs="dublin" tp="8544" />
  <ond oc="AU" o="ADL" dc="NL"  ds="Amsterdam " dfs="amsterdam" tp="839000" />
  <ond oc="AU" o="ADL" dc="GR"  ds="Athens" dfs="athens" tp="7807" />
  <ond oc="AU" o="ADL" dc="GB"  ds="Glasgow" dfs="glasgow" tp="6998" />
  <ond oc="AU" o="ADL" dc="AE"  ds="Dubai" dfs="dubai" tp="6986" />
  <ond oc="AU" o="ADL" dc="ES"  ds="Barcelona" dfs="barcelona" tp="6231" />
  <ond oc="AU" o="ADL" dc="GB"  ds="Birmingham" dfs="birmingham" tp="6104" />
  <ond oc="AU" o="ADL" dc="DE"  ds="Frankfurt" dfs="frankfurt" tp="5122" />
  <ond oc="AU" o="ADL" dc="IT"  ds="Milan" dfs="milan" tp="4952" />
  <ond oc="AU" o="ADL" dc="IT"  ds="Venice" dfs="venice" tp="4357" />
  <ond oc="AU" o="ADL" dc="DK"  ds="Copenhagen" dfs="copenhagen" tp="4323" /> 
</onds>

输出应该类似于按“dc”属性分组,具有相同的“oc”,即 AU 属性,然后根据“dc”参数对 tp 求和,并在 Powershell 中按降序排序

如果是 oc="AU"。

  1. 所有数据应根据“dc”分组并添加tp值,然后根据tp值对整个数据进行排序
  2. 就像我们在 all oc="AU" 中有 4 个 dc="GB" ,需要根据 tp 值的总和然后排序的单个记录。

【问题讨论】:

  • stackoverflow 不是脚本编写服务。我们在这里帮助您解决您在编写代码时遇到的具体问题。

标签: xml powershell xpath


【解决方案1】:

首先,您必须向我们展示您已经尝试过哪些内容,以及哪些内容不奏效。

其次,您必须知道如何将该 XML 转换为可用于您的用例的内容。

这是一篇关于将 XML 转换为 PSOject 的好帖子,以便您可以使用它。

将 XML 转换为 PSObject

我无法确定点表示法或 XPath 查询 提取属性/元素并将 $b 转换回原来的 PS对象。

Convert XML to PSObject

一旦您完成了所有转换,它只是使用 PowerShell 中内置的常规分组功能。

看这篇文章

使用 PowerShell Group-Object Cmdlet 显示数据

学习使用 Windows PowerShell 的其中一件事是 Windows PowerShell 可以如此轻松地对数据进行切片和切块。它变成了一个 快速数据分析工具,允许网络管理员、分析师、 和其他人解析数据以快速发现和修复问题。它 也可以用来审计基线信息,甚至是探索 通过大量的统计数据。

一个允许这种分析的 cmdlet 是 Group-Object cmdlet。在 作为最基本的形式,Group-Object cmdlet 接受来自 管道中的对象,它收集匹配的组 属性并显示结果。例如,检查状态 系统上的服务,从 Get-Service cmdlet 管道传输结果 到 Group-Object cmdlet 并使用 Status 属性。命令是 显示在这里。

获取服务 |组-对象-属性状态

https://blogs.technet.microsoft.com/heyscriptingguy/2012/01/11/use-the-powershell-group-object-cmdlet-to-display-data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2021-08-17
    相关资源
    最近更新 更多