2009-10-26 62 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工具欄使用的界面會更好一些?