当我被告知只有以下内容时,如何在复杂的XPath表达式中查找语法错误:
语法错误:鉴于XPath表达式
//td[text()="ASIN"] || //li[contains(., "ASIN: ")]
不是合法表达式。
我真的很想知道
答案 0 :(得分:2)
那是糟糕的诊断消息。
您可能不是在使用||
(在某些语言中是逻辑或),而是在搜索nodeset union in XPath。 (也就是说,假设您不打算使用XPath 3.0的string concatenation operator。)
使用更好的工具。诊断消息很难写得好。虽然在一般情况下不可能总是准确地指定修复语法错误的解决方法,但是最好的工具会提供最大的帮助。如果您的工具只说了 |
,则可以通过尝试使用更好的工具评估XPath来绝对了解更多信息:
由于以下原因XPath失败:串联运算符('||')需要启用XPath 3.0
http://videlibri.sourceforge.net/cgi-bin/xidelcgi
err:XPST0003:该语言功能在所选语言中不可用。至少需要XQuery / XPath 3.0版 在:// td [text()=“ ASIN”] || [<-错误在此之前发生] // li [contains(。,“ ASIN:”)]
错误-无法评估XPath表达式:javax.xml.transform.TransformerException:预期有位置路径,但是遇到了以下标记:|
避免常见的XPath版本 1 要求错误:
使用(BNF)力卢克(Luke):上面的XPath版本链接到关联的W3C XPath建议,其中包括定义合法XPath语法的确定语法规则。充分了解这些知识,以发现/避免XPath语法错误。
1 不幸的是,XPath没有内置的方式来获取其版本。那 留下两个选择:(1)知道托管语言的版本, 库,或基于其文档的应用程序实现,或(2)启动一个简单的(已知 正确的语法,当然)使用特定于版本的功能,并查看是否避免使用语法。