【问题标题】:xpath - how to union queries with priority of queryxpath - 如何结合查询优先级的查询
【发布时间】:2017-03-08 16:43:24
【问题描述】:

我想将 3 个查询与联合运算符“|”结合起来这工作正常, 但我想为每个查询设置优先级,例如,如果第一个查询会带来结果,那么它需要是 node[0]

示例://div[@class='class1'] | //div[@class='class2'] | //div[@class='class3']

因此,如果字符串有超过 1 个查询匹配项,则它需要遵循某个优先级,或者如果之前的一个查询匹配项有一些匹配项,则最好不要对其他查询带来任何结果 请帮忙 谢谢你

【问题讨论】:

  • 也许将 xpath 查询添加到其他两个 xpath 中?所以其他两个 xpath 依赖于以前的 xpath.. 示例://div[@class='class1'] | //div[@class='class1']/following-sibling::div[@class='class2'] 你必须要有创意
  • 这有点相反,我需要“如果 class1 不存在而不是搜索 class2”
  • 请指定 XPath 的版本。如果这是 XPath 1.0,那么您可能不走运。
  • 我正在使用它与 Php,不确定 php 是否与 xpath 1.0 或 2.0 一起使用
  • 然后//div[@class='class1'] | //body[not(div[@class='class1'])]/div[@class='class2'] | //body[not(div[@class='class1'] and not(div[@class='class2']))]/div[@class='class3'] 如果class1 存在,那么第二和第三xpath 将一无所获,如果class 2 存在则第三xpath 将一无所有..正如我之前所说,你必须有创意。 .

标签: xpath union multiple-conditions


【解决方案1】:

如果您只希望结果中有一个节点,那么通常的方法(假设 XPath 2.0 或更高版本)是:

(//div[@class='class1'], //div[@class='class2'], //div[@class='class3'])[1]

如果可能有多个具有@class='class1' 的节点,并且您想要所有这些节点,并且如果没有具有@class='class1' 的节点,那么您只想要具有@class='class2' 的节点,那么它是有点困难。但在我们继续之前,您需要告诉我们您使用的是哪个版本的 XPath。

【讨论】:

  • 感谢回复,我用的是php,所以我认为它的版本是1.x
  • 那么我认为您将不得不在 PHP 代码中做一些工作,发出多个 XPath 请求,直到其中一个选择某些内容。 (当然,除非您可以迁移到为 PHP 用户提供 XPath 3.0 的 Saxon/C...)
【解决方案2】:

//div[@class='class1'] | //body[not(div[@class='class1'])]/div[@class='class2'] | //body[not(div[@class='class1'] and not(div[@class='class2']))]/div[@class='class3']

如果 class1 存在,那么第 2 和第 3 个 xpath 将一无所获,如果 class 2 存在则第 3 个 xpath 将一无所获..

就是这个想法,但你必须进一步努力……发挥创造力,伙计。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多