【问题标题】:Xpath - is it possible to use more than one axes per query?Xpath - 每个查询是否可以使用多个轴?
【发布时间】:2019-03-05 16:29:48
【问题描述】:
.//*[preceding::*[text()='Taco Salad'] and following::*[text()='Fajita Salad']]

我在此页面上有文字,.//*[text()='Taco Salad'].//*[text()='Fajita Salad'] 的两个查询都返回了我的预期。但是我有点困惑如何尝试将这些与后续和前面结合起来以获取中间出现的一些选项节点。

有没有人有任何使用两个轴的工作示例?

我找到了这个帖子:combining XPATH axes (preceding-sibling & following-sibling) 并尝试在它之后为我的轴建模,但它们似乎不是有效的 xapths。我错过了什么明显的东西吗?

【问题讨论】:

  • 这个 xpath //*[following-sibling::*[@class="bottom-notice"] and preceding-sibling::*[@name="new-answer"]] 似乎正在处理这个问题页面(也适用于 selenium)
  • 哇,这对我有用,TY,把它写成答案而不是评论,我会把它标记为解决问题。

标签: xpath


【解决方案1】:

很遗憾,您并没有真正告诉我们您想要实现的目标。是的,您可以使用多个轴;您可以根据您想要的结果以各种不同的方式组合它们。所以你需要解释你想要什么结果。在顶层使用“and”只是测试“and”的两个操作数是否选择了某些东西。

您的问题“是否有人有任何工作示例”无济于事。是的,我们可以为您提供数以千计的工作示例,但完全有可能没有一个可以满足您的需求。

以下是组合两个轴步长 X 和 Y 的一些可能方式:

X/Y - 选择 X,然后从那里选择 Y

X 和 Y - 如果 X 和 Y 都选择了某些东西,则返回 true

X 或 Y - 如果 X 或 Y 选择了某些东西,则返回 true

X | Y - 返回 X 和 Y 选择的并集

X intersect Y - 返回 X 和 Y 选择的交集

您最接近需求声明的是“抓住一些出现在中间的选项节点”。如果没有看到您的源文档,这很难解释。它也可能是 XPath 2.0 中比 1.0 中更容易的查询,因此您确实需要告诉我们您使用的是哪个版本。

【讨论】:

  • 问题很大,我可以花一整天时间解释它的细节,但我真的不需要。感谢您的回复和示例 X/Y 等。我真的不需要数千个工作示例,也不需要 SO 来解决我的确切问题,但您可能会惊讶地发现,在线使用两个轴的语法正确示例很少。 “抓住......出现在中间”这正是我想要做的,但是 selenium (1.0xpath?iirc) 返回了无效的 xpath。如果您使用语法正确的 X/Y 示例来制作指南,这正是我一直在寻找的。​​span>
  • 就个人而言,我发现“搜索解决我的问题的示例”的方法是一种非常低效的工作方式。最好买一本涵盖该语言功能的书,并从头到尾浏览一遍,然后在对这些功能进行概述后返回相关部分。
【解决方案2】:

在单个 xpath 中组合轴的工作示例可以是:

//*[following-sibling::*[@class="bottom-notice"] and preceding-sibling::*[@name="new-answer"]]

它会寻找元素form 在此页面上写下答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多