xml - 或在 XPath 表达式中从多个节点名称中进行选择
问题描述
给定这样的XML...
<Rule scope="node">
<Property>regKeyExists</Property>
<Path>HKLM\SOFTWARE\MozillaPlugins\ K:@microsoft.com/GENUINE</Path>
<Operator>-eq</Operator>
<Value>true</Value>
</Rule>
<Or scope="node">
<Rule>
<Property>regKeyExists</Property>
<Path>HKLM\SOFTWARE\MozillaPlugins\ K:@microsoft.com/GENUINE</Path>
<Operator>-eq</Operator>
<Value>true</Value>
</Rule>
</Or>
...但是它可能具有 and 以外的节点<Rule>
,<Or>
并且可能具有Scope
“节点”以外的值,我试图仅选择范围 = node 的 Rule 和 Or 节点。目前我正在使用$nodes = $xml.SelectNodes("./*[@scope='node']")
then 循环foreach ($node in $nodes)
和检查$node.name
,所以我可以只使用 Rule 和 Or 节点。但我更喜欢使用 XPath。我找到了or
在谓词表达式中使用的参考,但仅限于属性,而不是节点名称。
解决方案
这个 XPath,
//*[self::Rule or self::Or][@scope='node']
将选择所有Rule
或属性值为 的Or
元素。@scope
'node'
推荐阅读
- javascript - Javascript 使用不必要的 instanceof 构造函数删除并返回新对象
- html - iframe 下载 html 源代码而不是显示它
- python - Pandas 过滤或删除行多个条件
- python - 迭代数组以使用 python 构建电子邮件正文
- php - 如何在每个循环中同时在php中存储多行?
- python-3.x - Python - 页面对象继承失败
- c - C 管道和流程
- c# - EF6 Code First - 通知 EF 不需要发出不可为空的标量,因为定义了 DEFAULT VALUE CONSTRAINT
- c# - 使用 PropertyInfo 作为键
- php - 用php连接sqlserver 2000