XPath表达式异常

时间:2009-10-26 14:34:44

标签: javascript xpath xul

我不确定我是否正确使用XPath表达式。我试图在DOM上找到一个文本,这个文本是一个变量。我有文本存储在SQLite中,我已检索文本,我试图在实际包含文本的网页上找到它。所以我有以下代码:

var searchText = dataset[x]['selectedText'];
        alert(dataset[x]['selectedText']);
        var res = googbar_frames[0].contentDocument.evaluate("//*[.=searchText]",googbar_frames[0].contentDocument.body,null,XPathResult.ANY_TYPE,null);
        alert(res.snapshotLength);

我收到以下错误。

Error: Permission denied for <http://en.wikipedia.org> to call method XPathException.toString on <>.
Error: Permission denied for <http://en.wikipedia.org> to call method XPathException.toString on <>.

表达正确。我正在尝试在DOM上查找文本。或者我错了吗? 欢呼声

2 个答案:

答案 0 :(得分:2)

[这是对a followup questionmy original answer的回答。对不起,stackoverflow纯粹主义者!评论事情并不总是奏效。]

是的,这是我之前谈到的。 ".//text()[contains(.,searchText)]"不使用JavaScript变量searchText,它只是一个字符串。

您可以使用searchText构建XPath表达式。 JS中没有variable interpolation,所以你必须使用手动连接来构造XPath表达式,如下所示:

var xpathExpr = ".//text()[contains(.,'" + searchText + "')]";

... 除了失败,如果searchText包含单引号('),那么你必须在XPath中转义它以及可能在此上下文中具有特殊含义的其他字符。我不知道你究竟是什么以及如何在searchText中逃脱,它将涉及搜索现有解决方案的互联网或读取xpath规范来学习这种情况下的语法。

所以我坚持原来的回复:

你究竟想做什么?也许使用Firefox查找工具栏使用的界面会更好吗?

答案 1 :(得分:0)

[这是问题的原始答案,另请参阅followup questionan answer to the follow-up]

表达式不正确。在browser.xul上下文中运行此(即使用正确的表达式):

 content.document.evaluate("//*[.=searchText]",
   content.document.body,null,XPathResult.ANY_TYPE,null); 

- 虽然不是很有用,但不会产生这样的例外。

您是否在XPath表达式中实际包含searchText?引用得当吗?我希望您的XPath结果不会像您期望的那样,那么您实际上想要做什么?也许使用Firefox查找工具栏使用的界面会更好吗?