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

时间:2018-09-22 17:27:04

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

当我被告知只有以下内容时,如何在复杂的XPath表达式中查找语法错误:

  

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

我真的很想知道

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

1 个答案:

答案 0 :(得分:2)

那是糟糕的诊断消息。

您特定的XPath语法问题

您可能不是在使用||(在某些语言中是逻辑或),而是在搜索nodeset union in XPath。 (也就是说,假设您不打算使用XPath 3.0的string concatenation operator。)

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

  1. 使用更好的工具。诊断消息很难写得好。虽然在一般情况下不可能总是准确地指定修复语法错误的解决方法,但是最好的工具会提供最大的帮助。如果您的工具只说了 | ,则可以通过尝试使用更好的工具评估XPath来绝对了解更多信息:

    • oXygen XML Editor使用Saxon

        

      由于以下原因XPath失败:串联运算符('||')需要启用XPath 3.0

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

        

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

    • www.xpathtester.com/xpath

        

      错误-无法评估XPath表达式:javax.xml.transform.TransformerException:预期有位置路径,但是遇到了以下标记:|

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

    1. XPath 1.0
    2. 正则表达式,序列需要
    3. XPath 2.0
    4. XPath 3.0对于名称空间文字||,!,内联匿名函数是必需的。
    5. 数组和关联数组需要
    6. XPath 3.1
  3. 使用(BNF)力卢克(Luke):上面的XPath版本链接到关联的W3C XPath建议,其中包括定义合法XPath语法的确定语法规则。充分了解这些知识,以发现/避免XPath语法错误。

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