powershell - XPath SelectNodes的高级条件

标签 powershell xpath

我对XPath的理解达到了绊脚石。我可以进行基本的选择而没有太多麻烦,但是我现在不仅需要根据节点所属的节点来选择节点,还需要根据节点是否包含特定节点来进行选择,而且我一直发现自己会选择较大选择的路径,然后进行“循环”和“如果跳舞”以使其降低。而且我以某种方式认为我在XPath中缺少一些巧妙的技巧,无法在单个语句中做到这一点。

因此,考虑到下面的XML,根据特定的位置ID和Set中特定值的存在,我想得出一组计算机节点。因此,$ location = Amsterdam&$ set = Viz应该只返回A-1计算机,但是$ location = Amsterdam&$ set = Arch应该返回阿姆斯特丹的所有三台计算机。

那么,这完全可以在XPath语句中完成吗?如果没有,那么是否有一个漂亮的Powershell管道技巧?还是我最好的选择是使用XPath来解决“位置和循环”问题,如果要过滤掉这些集合?

<Management>
  <Computers>
    <Location id="Amsterdam">
      <Computer id="A-1">
        <ConformSets>
          <Set>Arch</Set>
          <Set>Viz</Set>
        </ConformSets>
      </Computer>
      <Computer id="A-2">
        <ConformSets>
          <Set>Arch</Set>
        </ConformSets>
      </Computer>
      <Computer id="A-3">
        <ConformSets>
          <Set>Arch</Set>
        </ConformSets>
      </Computer>
    </Location>
    <Location id="Berlin">
      <Computer id="B-1">
        <ConformSets>
          <Set>Viz</Set>
        </ConformSets>
      </Computer>
      <Computer id="B-2">
        <ConformSets>
          <Set>Arch</Set>
        </ConformSets>
      </Computer>
      <Computer id="B-3">
        <ConformSets>
          <Set>Arch</Set>
        </ConformSets>
      </Computer>
    </Location>
  </Computers>
</Management>

最佳答案

您可以使用以下XPath表单基于ComputerLocation属性和id后代元素值返回Set元素:

//Location[@id='some_id']/Computer[ConformSets/Set='some_set_value']

关于powershell - XPath SelectNodes的高级条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817821/

相关文章:

c# - 如果 Powershell 条件结果为真,如何将阶段标记为不稳定?

powershell - 通过 PowerShell 将 WebApp 文件上传/发布到 Azure

windows - 如何使用 Powershell 创建以管理员身份运行快捷方式

xml - 匹配具有特定祖先Xpath Xslt的节点

sql-server - 带有没有命名空间的 SQL Server 的 XPath

powershell - 如何使用来自 sql 作业代理的默认凭据运行 powershell 脚本

.net - 在 Powershell (V5) 类中使用 .NET 对象

java - Webdriver findElements 通过 xpath

xml - XSLT 根据另一个值添加属性值

多个文本节点上的 XPath 函数