【问题标题】:Syntax Error: XPath Is Not a Legal Expression语法错误:XPath 不是合法表达式
【发布时间】:2019-02-26 18:31:09
【问题描述】:

当我被告知的只是:

语法错误:给定 XPath 表达式 //td[text()="ASIN"] || //li[contains(., "ASIN: ")] 不是合法表达式。

我很想知道

  • 如何解决这个问题?
  • 如何解决其他 XPath 语法问题(无需每次都在这里询问)?

【问题讨论】:

    标签: python xml python-3.x selenium xpath


    【解决方案1】:

    这是一个糟糕的诊断信息。

    您的特定 XPath 语法问题

    您可能正在寻找|,而不是||(在某些语言中是逻辑或),即nodeset union in XPath。 (也就是说,假设您的目标不是 XPath 3.0 的 string concatenation operator。)

    一般如何查找和修复 XPath 语法问题

    1. 使用更好的工具。诊断消息很难写好。虽然在一般情况下不可能总是准确地指定要修复什么来修复语法错误,但最好的工具最有帮助。如果您的工具不超过 XPath syntax error,那么您绝对可以通过尝试使用更好的工具评估您的 XPath 来了解更多信息:

    2. 避免常见的 XPath 版本1 需求错误:

      1. XPath 1.0
      2. 正则表达式、序列需要XPath 2.0。
      3. 命名空间文字、||、!、内联匿名函数需要 XPath 3.0。
      4. 数组和关联数组需要XPath 3.1。
    3. 使用 (BNF) 力量,Luke:上述 XPath 版本链接到相关的 W3C XPath 建议,其中包括定义合法 XPath 语法的最终语法规则。了解这些以发现/避免 XPath 语法错误。

    1 不幸的是,XPath 没有内置方法来获取其版本。那 留下两个选择:(1)知道托管语言的版本, 库或应用程序基于其文档实现,或 (2) 启动一个简单的探测(已知 正确的语法,当然)使用版本特定的功能,看看是否避免了语法。

    【讨论】:

    • 通常没有单一的、唯一的 XPath 来选择 XML 文档中的任何给定元素。
    • 除了保留联合前的集合或联合后重新测试,没有。
    • 我有个更好的主意。当我有时间时,我会重写你的问题,为网站增加长期价值。如果你有耐心,我相信我可以把你的 -6 变成一个正数,甚至可能是显着的正数。听起来不错?
    • 答案已更新,并附有关于版本控制的说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多