繁体   English   中英

Powershell-XPath-SUM()和Count()子节点-仅XPath表达式

[英]Powershell - XPath - SUM() and Count() Child Nodes - XPath Expression Only

Xpath的新手,在powershell中处于中间。 昨天花了很多时间研究,但在powershell -XPath命令中找不到xpath sum()或count()表达式的单个示例。 我将这作为我的第一个stackoverflow问题来进行详细介绍,以便将来的人们可以从XPert那里找到本文的清晰示例答案。

目标(2):1. Count()关键过程。 2. SUM()由关键流程处理的交易。
注意:powershell XPath命令的输出应为原始数字。

<units>
<unit>
  <unitName>Generic Process Unit</unitName>
    <attribute>
      <name>Process Type</name>
      <value>Critical Process</value>
    </attribute>
    <attribute>
      <name>Transactions Processed</name>
      <value>10</value>
    </attribute>
</unit>

<unit>
  <unitName>Generic Process Unit</unitName>
    <attribute>
      <name>Process Type</name>
      <value>Trivial Process</value>
    </attribute>
    <attribute>
      <name>Transactions Processed</name>
      <value>7</value>
    </attribute>
</unit>

<unit>
  <unitName>Generic Process Unit</unitName>
    <attribute>
      <name>Process Type</name>
      <value>Critical Process</value>
    </attribute>
    <attribute>
      <name>Transactions Processed</name>
      <value>5</value>
    </attribute>
</unit>
</units>

我对SUM功能的最佳尝试。 甚至没有尝试Count:

select-xml -path mine.xml -XPath '//attribute[value="Critical Process"]/../attribute[name="Transactions Processed"][sum(value)]' | Select-Object -ExpandProperty node | select Value

编辑:下面是从notepad ++ XMLTool插件工作的XPath,但仍需要Powershell等效项(这在Powershell中不起作用):

sum(//attribute[value="Critical Process"]/../attribute[name="Transactions Processed"]/value)

勘误表:之所以需要仅XPath表达式,是因为我仅使用powershell构造和验证我的XPath字符串。 最终目标是将这些字符串放入实际上将使用XPath字符串的非Powershell软件中。 该软件使我无法验证XPath,将它放入后需要20分钟的时间才能知道它是否可以工作,因此我将Powershell用作测试平台。

我更改了项目名称,说明并删除了属性,以使示例更简单。 但是,我不知道“ schema”一词是否重要,因此这里是原始“ value”行的一个示例。

<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Critical Process</value>

问题:

  • 似乎需要对给定的XPath表达式进行一些调整才能在Powershell中工作。 例如,在-XPath'/ xpath / node'之后,您似乎总是需要以'/ text()'结尾。 选择对象-ExpandProperty节点| 选择“值”以实际查看所需的输出。

  • Microsoft具有XPath文档和Powershell文档,但是没有“ PowerShell中的XPath表达式”文档。

  • 大多数Internet表达式的示例都使用“ Powershell + XPath”来做最少的XPath来获取数据对象,然后在powershell中使用foreach进行循环。

  • 看起来命令语法可能与XPath版本1、2等有关。

提前致谢。

据我所知,这些功能不适用于Select-Xml因为它似乎在幕后只能使用返回节点的[XmlDocument] :: SelectNodes。

或者,您可以使用导航器:

$xml = @'
#your xml here
'@ -as [xml]

$xml.CreateNavigator().Evaluate('count(//unit)')
$xml.CreateNavigator().Evaluate('sum(//unit)')

计数应尽可能简单

count(/units/unit[attribute[name="Process Type"][value="Critical Process"]])

(使用两个嵌套的谓词级别来确保namevalue都在同一 attribute )。 对于总和,我们只需在表达式的末尾添加一点

sum(/units/unit[attribute[name="Process Type"][value="Critical Process"]]/attribute[name="Transactions Processed"]/value)

但是请注意,这两个表达式都将返回数字值,而不是节点集,这可能会使powershell感到困惑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM