2009-10-26 64 views
1

我不确定如果我正在使用XPath表达式执行此操作。我正在尝试在DOM上查找文本,并将此文本分配给一个变量。我有存储在SQLite中的文本,并且我已经检索了文本,并且正试图在实际上包含文本的网页上找到它。所以我ahve下面的代码:XPath表达式异常

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上的文本。或者我会错误的somwehere? 欢呼

+1

需要更多的代码。什么是googbar_frames?代码从哪里调用? – 2009-10-26 14:59:27

回答

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 Find工具栏使用的界面会更好一些?

+0

嘿, 你在XPath表达式中包含searchText意味着什么? var searchText = dataset [x] ['selectedText']; //它们的代码从数据库中检索文本,例如足球。所以要搜索的文本是'足球'。 至于contentDocument的东西,我已经在主浏览器中获得了框架,并且它的目标是用于Firefox。 – fftoolbar 2009-10-27 01:38:59

+1

非常感谢。是的,我设法得到我想要的东西。这个回答很有帮助。 – fftoolbar 2009-10-28 16:05:42

2

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

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

您可以使用searchText构造XPath表达式。有没有在JS没有variable interpolation,所以你必须构建XPath表达式使用手动拼接,就像这样:

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

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

所以我坚持我原来的回复:

你究竟在做什么?也许使用Firefox Find工具栏使用的界面会更好一些?