【问题标题】:Xpath query with multiple nodes at different levels具有不同级别的多个节点的 Xpath 查询
【发布时间】:2019-02-02 06:40:29
【问题描述】:

我需要一个 Xpath 查询来查找具有某些节点的 XML 文件。节点位于 XML 文件中的不同级别,在不同的父级下。因此,如果我想使用节点“author”和“ref year =1999”来恢复如下文件一样。

<FILE>
    <header>
        <author> X </author>
    </header>
    <text>
        <type>
            <ref year="1999">
        </type>
    </text>
</FILE>

唯一的区别是我使用的 XML 具有更复杂的结构,因此如果我可以使用“//”来查找任何位置的节点,而不是使用确切的路径,那将是理想的选择。 我不能使用 |运算符加入两个节点,因为我想找到同时满足两个条件而不是一个的文件。

谢谢!

【问题讨论】:

  • 那么你想要的输出是什么? FILE 被两个特定后代匹配?
  • 这是一个很好表达的第一个问题。为了使它像@Andersson 建议的那样更好,请包含一个足够复杂的示例,以涵盖应该选择和不应该选择的内容,并明确列出您想要的输出。我相信我已经预料到了您的需求,并在下面给出了答案,但这些细节将帮助您在未来更快地获得符合要求的答案。欢迎使用 Stack Overflow。

标签: xml xpath xpathquery


【解决方案1】:

这个 XPath,

//FILE[header/author="X" and text/type/ref/@year="1999"]

将选择文档中任何满足谓词条件的FILE元素。

如果您想要一个析取谓词,请使用or 而不是and。 (注意| 用于连接节点集。)andornot() 的组合可用于在谓词中表达完整的布尔表达式。

如果FILE 下的结构本身发生变化,您可以使用.// 来“跳过”这些变化。例如,

//FILE[.//author="X" and .//ref/@year="1999"]

将忽略FILEauthorref/@year 之间的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多