xml - XPath 'or' 运算符使用 'pipe' 字符?

标签 xml xpath operators msxml6

在 AutoHotKey 例程中,我使用 MSXML6 来解析 XML 文档。

doc := ComObjCreate("MSXML2.DOMDocument.6.0")
doc.setProperty("SelectionLanguage", "XPath")
doc.async := false
doc.loadXML(xmldata)
doc.selectNodes("osm/way|rel[tag[@k='railway'][@v='station']]").length

SelectNodes 行中,我希望将结果过滤为仅两个节点:way|rel

它不会抛出错误,但会忽略 rel 仅返回 way 节点。

此语法在 Saxon 中使用时有效。 MSXML 中是否有解决方案,或者是否有我可以实现的替代解析器?

最佳答案

XPath 2.0 需要在单个 XPath 中使用 | 。 MSXML 仅支持 XPath 1.0。

XPath 1.0

@wp78de 的答案有效 (+1),但您可以避免在 | 中重复 tag[@k='railway'][@v='station'] 条件。 通过在谓词中使用 self:: 轴:

osm/*[(self::way or self::rel) and tag[@k='railway'][@v='station']]

XPath 2.0

为了以后可能使用 XPath 2.0 库的读者的利益:

osm/(way|rel)[tag[@k='railway' and @v='station']]

(@wp78de 在意识到 OP 仅限于 XPath 1.0 之前也发布了此内容。)

关于xml - XPath 'or' 运算符使用 'pipe' 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65544668/

相关文章:

c# - Selenium/Chrome - 选择没有 ID 的复选框输入

c++ - 为什么带有逻辑与运算符和递增运算符的 C++ 程序给出的输出与预期的不同?

Javascript 逻辑运算符和结果

xml - 通过 Xquery 将 XML 中的数据转换为文本

使用 XSD 进行 PHP SimpleXMLElement 验证

python - 如何使用 Selenium 单击此按钮?

c++ - 在一个对象上运行,运算符用索引重载 ()

c# - 获取一个节点列表,其中包含所有子节点数为0的节点

Java:使用 Jackson 将 CSV 转换为 XML

xml - 如何计算具有相同属性值的元素