当前位置: 代码迷 >> python >> 语法错误:XPath 不是合法表达式 一般如何查找和修复 XPath 语法问题
  详细解决方案

语法错误:XPath 不是合法表达式 一般如何查找和修复 XPath 语法问题

热度:158   发布时间:2023-07-14 09:52:47.0

当我被告知的是,如何在复杂的 XPath 表达式中找到语法错??误:

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

我真的很想知道

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

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

您特定的 XPath 语法问题

而不是|| ,这在某些语言中是逻辑 OR,您可能正在寻找| ,这是。 (也就是说,假设您的目标不是 XPath 3.0 的。)

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

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

    • 使用:

      XPath 失败,原因是:连接运算符 ('||') 需要启用 XPath 3.0

    • err:XPST0003: 此语言功能在所选语言中不可用。 至少需要 XQuery/XPath 3.0 版: //td[text()="ASIN"] || [<- 此处之前发生错误] //li[contains(., "ASIN: ")]

    • 错误 - 无法计算 XPath 表达式:javax.xml.transform.TransformerException:需要位置路径,但遇到以下标记:|

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

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

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