【问题标题】:How to prevent Xpath recursion如何防止 Xpath 递归
【发布时间】:2018-09-20 13:28:54
【问题描述】:

鉴于我有这个(未知)文档结构,我如何编写 xpath 来选择 div1 和 div2,即所有 div,但不能递归(没有 div,包含在另一个 div 中的任何位置)?

我找不到任何可以将我指向这个方向的文档,我所能做的就是选择所有 div,即 div1、div2 和 div3(使用 //div 表达式),但我想在这里排除 div2它是另一个的后代 div。

(我需要一个通用的解决方案来选择不递归的标签,这里的 id 仅用于说明目的。)

  ...some unknown structure with no divs...
  <div id="1">
    ...some unknown structure with no divs...
    <div id="2"></div>
    ...some unknown structure with no divs...
  </div>
  ...some unknown structure with no divs...
  <div id="3"></div>
  ...some unknown structure with no divs...

【问题讨论】:

  • "我找不到任何文档" - 也许您犯了一个错误,即搜索此特定问题的特定解决方案,而不是阅读轴和谓词的一般规则,以便您可以构建您自己的解决方案。
  • @MichaelKay 我做到了,但我设法找到的 Xpath 文档非常枯燥,马丁的回答让我觉得这一切都很顺利。有些人通过教程和示例学得更快……至少我是这样。

标签: xpath


【解决方案1】:

如果您选择//div[not(ancestor::div)],则选择所有没有任何祖先的div元素也是div

如果您可以访问 XPath 3.1 或 3.0,您还可以使用 outermost 函数 https://www.w3.org/TR/xpath-functions/#func-outermost,因为它“返回序列中没有另一个节点作为祖先的序列中的每个节点”所以“表达式outermost(//div) 返回那些不包含在其他 div 元素中的 div 元素”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    相关资源
    最近更新 更多