【发布时间】:2019-02-26 18:31:09
【问题描述】:
当我被告知的只是:
语法错误:给定 XPath 表达式
//td[text()="ASIN"] || //li[contains(., "ASIN: ")]不是合法表达式。
我很想知道
- 如何解决这个问题?
- 如何解决其他 XPath 语法问题(无需每次都在这里询问)?
【问题讨论】:
标签: python xml python-3.x selenium xpath
当我被告知的只是:
语法错误:给定 XPath 表达式
//td[text()="ASIN"] || //li[contains(., "ASIN: ")]不是合法表达式。
我很想知道
【问题讨论】:
标签: python xml python-3.x selenium xpath
这是一个糟糕的诊断信息。
您可能正在寻找|,而不是||(在某些语言中是逻辑或),即nodeset union in XPath。 (也就是说,假设您的目标不是 XPath 3.0 的 string concatenation operator。)
使用更好的工具。诊断消息很难写好。虽然在一般情况下不可能总是准确地指定要修复什么来修复语法错误,但最好的工具最有帮助。如果您的工具不超过 XPath syntax error,那么您绝对可以通过尝试使用更好的工具评估您的 XPath 来了解更多信息:
XPath 失败,原因是:连接运算符 ('||') 需要启用 XPath 3.0
http://videlibri.sourceforge.net/cgi-bin/xidelcgi
err:XPST0003:此语言功能在所选语言中不可用。至少需要 XQuery/XPath 3.0 版 在: //td[text()="ASIN"] || [
错误 - 无法评估 XPath 表达式:javax.xml.transform.TransformerException:应为位置路径,但遇到以下标记:|
避免常见的 XPath 版本1 需求错误:
使用 (BNF) 力量,Luke:上述 XPath 版本链接到相关的 W3C XPath 建议,其中包括定义合法 XPath 语法的最终语法规则。了解这些以发现/避免 XPath 语法错误。
1 不幸的是,XPath 没有内置方法来获取其版本。那 留下两个选择:(1)知道托管语言的版本, 库或应用程序基于其文档实现,或 (2) 启动一个简单的探测(已知 正确的语法,当然)使用版本特定的功能,看看是否避免了语法。
【讨论】: