问题描述
当我被告知的是,如何在复杂的 XPath 表达式中找到语法错??误:
语法错误:给定 XPath 表达式
//td[text()="ASIN"] || //li[contains(., "ASIN: ")]
//td[text()="ASIN"] || //li[contains(., "ASIN: ")]
不是合法的表达式。
我真的很想知道
- 我该如何解决这个问题?
- 如何修复其他 XPath 语法问题(无需每次都在这里询问)?
1楼
这是一个糟糕的诊断信息。
您特定的 XPath 语法问题
而不是||
,这在某些语言中是逻辑 OR,您可能正在寻找|
,这是。
(也就是说,假设您的目标不是 XPath 3.0 的。)
一般如何查找和修复 XPath 语法问题
使用更好的工具。 诊断消息很难写好。 虽然在一般情况下不可能总是准确地指定修复什么来修复语法错误,但最好的工具最有帮助。 如果您的工具仅显示
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:需要位置路径,但遇到以下标记:|
避免常见的 XPath 版本1要求错误:
- 正则表达式、序列需要 。
- 命名空间文字、||、!、内联匿名函数需要 。
- 数组和关联数组需要 。
使用 (BNF) force,Luke :上述 XPath 版本链接到相关的 W3C XPath 建议,其中包括定义合法 XPath 语法的权威语法规则。 了解这些以发现/避免 XPath 语法错误。
1不幸的是,XPath 没有内置的方法来获取它的版本。 这留下了两个选项:(1) 根据其文档了解托管语言、库或应用程序实现的版本,或 (2) 启动使用特定版本功能的简单探测(当然,具有已知的正确语法)并查看是否避免了语法。