语法错误:XPath 不是法律表达式



当我被告知的只是:

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

我真的很想知道

  • 如何解决此问题?
  • 如何修复其他 XPath 语法问题(无需每次都在此处询问(?

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

您的特定 XPath 语法问题

而不是||,在某些语言中是逻辑的 OR,您可能正在寻找|,这是 XPath 中的节点集联合。 (也就是说,假设您的目标不是 XPath 3.0 的字符串串联运算符。

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

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

    • oXygen XML Editor using Saxon:

      XPath 失败的原因如下:串联运算符 ('||'( 需要启用 XPath 3.0

    • http://videlibri.sourceforge.net/cgi-bin/xidelcgi

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

    • www.xpathtester.com/xpath:

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

  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( 启动一个简单的探测(已知 正确的语法,当然(使用特定于版本的功能,并查看是否避免语法。

最新更新