基于XML属性的分组、排序和求和

基于XML属性的分组、排序和求和,xml,powershell,xpath,Xml,Powershell,Xpath,我有下面这样的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="D

我有下面这样的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”的情况下

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

  • 首先,您必须向我们展示您尝试过的内容,以及哪些内容不起作用

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

    下面是一篇关于将XML转换为PSObject以便您可以使用它的好文章

    将XML转换为PSObject

    我在计算点表示法或XPath查询时遇到问题 提取属性/元素并将$b转换回原始值 PSObject

    一旦您完成了所有转换,就只需使用PowerShell中内置的正常分组功能

    看到这篇文章了吗

    使用PowerShell组对象Cmdlet显示数据

    学习使用Windows PowerShell的一个要点是 Windows PowerShell可以轻松地对数据进行切片和骰子分割。它变成了一个 快速数据分析工具,允许网络管理员、分析师、, 和其他人一起解析数据以快速发现和解决问题。信息技术 也可用于审核基线信息,甚至用于spelunk 通过大量的统计数据

    允许此分析的一个cmdlet是Group Object cmdlet。在里面 最基本的形式是Group Object cmdlet,它接受来自 对象,并收集与之匹配的组 属性并显示结果。例如,检查状态 对于系统上的服务,通过管道从Get-Service cmdlet获取结果 添加到Group Object cmdlet,并使用Status属性。命令是 如图所示

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


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