Javascript XPath表达式返回';指定了非法字符串';在铬,但不是FF
这是一个xPath表达式,在Firefox用户脚本中运行良好,但在(本机)chrome用户脚本中失败:Javascript XPath表达式返回';指定了非法字符串';在铬,但不是FF,javascript,google-chrome,xpath,greasemonkey,evaluate,Javascript,Google Chrome,Xpath,Greasemonkey,Evaluate,这是一个xPath表达式,在Firefox用户脚本中运行良好,但在(本机)chrome用户脚本中失败: var nodesSnapshot = document.evaluate("//a[@class='inline-object' and .[contains(@href,'test.com')] ]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); //just the string: "//a[@class
var nodesSnapshot = document.evaluate("//a[@class='inline-object' and .[contains(@href,'test.com')] ]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
//just the string:
"//a[@class='inline-object' and .[contains(@href,'test.com')] ]"
错误消息:
未捕获的语法错误:指定了无效或非法的字符串
我尝试过几种方法(例如额外的括号),谷歌搜索和搜索stackoverflow都没有成功。我还尝试:
“//一张[@class='inline-object操作卡'和一张[@href='test.com']]”
这也不起作用。是否有人可以解释这一点并更正代码?提前谢谢 编辑:更重要的信息:问题似乎是“和”语句中的“当前节点”(点) 第二次编辑:这里有一个测试节点:
像
[true()]
这样的XPath表达式实际上是非法的(至少在XPath 1.0中是这样)。只允许使用谓词
- 在节点测试之后,而不是在缩写步骤之后,如
- 在or之后,但不在任何其他表达式之后
或self::node()[包含(@href,'test.com')]
或self::*[包含(@href,'test.com')]
()[包含(@href,'test.com')]
//a[@class='inline-object'和contains(@href,'test.com')]
?似乎也会导致“未捕获的语法错误:指定了无效或非法的字符串”。错误:(我这样写的唯一原因是指定我希望当前节点与and语句匹配,而不是与任何其他语句匹配(即使用//a而不是。)@RossPatterson建议的表达式与您的表达式相同。我在铬上试用过,似乎效果很好。我仍然无法使我的表达式起作用(如果您建议的话),但是@RossPatterson的表达式起作用了,谢谢!谢谢,我一定是弄乱了我的字符串,它有点长,有点复杂。向Ross Patterson道歉。我找到了一些关于和/更复杂语句的教程,我遵循了,但现在更清楚了。谢谢!作为将来的参考,W3Schools是一个非常贫乏的资源。这是信息这通常是不正确的。