我对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表单基于Computer
的Location
属性和id
后代元素值返回Set
元素:
//Location[@id='some_id']/Computer[ConformSets/Set='some_set_value']
关于powershell - XPath SelectNodes的高级条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817821/