Исключение для выражения XPath - PullRequest
1 голос
/ 26 октября 2009

Я не совсем уверен, правильно ли я делаю это с выражением 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 ]

2 голосов
/ 27 октября 2009

[Это ответ на дополнительный вопрос на мой первоначальный ответ .Извините, стекистопуристы пуристы!Комментарии не всегда работают.]

Да, это то, о чем я говорил ранее.".//text()[contains(.,searchText)]" не использует переменную JavaScript searchText, это просто строка.

Вы можете создать выражение XPath, используя searchText.В JS отсутствует переменная интерполяция , поэтому вы должны создать выражение XPath, используя ручную конкатенацию, например:

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

... , за исключением того, что это не удается , еслиsearchText включает в себя одну кавычку ('), поэтому вы должны избегать ее и, возможно, других символов, имеющих особое значение в этом контексте в XPath.Я не собираюсь выяснять для вас, что именно и как вам нужно избегать в searchText, это будет включать либо поиск в интернете существующего решения, либо чтение спецификации xpath для изучения грамматики в этом случае.

Так что я придерживаюсь своего первоначального ответа:

Что вы на самом деле пытаетесь сделать?Возможно, было бы лучше использовать интерфейсы, которые использует панель инструментов Firefox Find?
0 голосов
/ 26 октября 2009

[Это оригинальный ответ на вопрос, см. Также ответ на вопрос и ответ на ответ ]

Выражение неверное. Выполнение этого (т. Е. С использованием правильного выражения) в контексте browser.xul:

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

- хотя это и не очень полезно, такого исключения не выдает.

Вы действительно включаете searchText в выражение XPath? Это правильно указано? Я ожидаю, что ваши результаты XPath не будут такими, как вы ожидаете, так что вы на самом деле пытаетесь сделать? Возможно, было бы лучше использовать интерфейсы, которые использует панель инструментов Firefox Find?

...