基于XML属性

时间:2018-02-07 19:59:22

标签: 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="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. 就像我们在所有oc =“AU”中有4 dc =“GB”,需要基于tp值的总和的单个记录然后排序。

1 个答案:

答案 0 :(得分:0)

首先,您必须向我们展示您尝试过的内容,以及未详细说明的内容。

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

这是一篇关于将XML转换为PSOject的好文章,因此您可以使用它。

  

将XML转换为PSObject

     

我无法找到点符号或XPath查询   提取属性/元素并将$ b转换回原始元素   PSObject。

     

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属性。命令是   这里显示。

     

Get-Service | Group-Object -Property status

     

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