Я пишу довольно простой скрипт GreaseMonkey, который находит текст в определенном элементе, а затем использует этот текст для дальнейших действий. Соответствующие биты кода следующие:
В HTML есть span с классом someclass, который содержит небольшую строку текста:
<span class="someclass">some text</span>
Затем в JavaScript я пытаюсь найти этот класс и вытянуть его содержимое («некоторый текст») в переменную, используя стандартный XPath jazz:
document.evaluate("//span[@class='someclass']/text()", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
Вот проблема: когда я запускаю это на страницах, где «некоторый текст» является базовой строкой с базовыми символами, все работает нормально, но когда я запускаю его на страницах, где «какой-то текст» содержит сущности, происходит сбой. Например, все в порядке, и XPath возвращает нужный мне текст:
<span class="someclass">some text</span>
<span class="someclass">some other text</span>
<span class="someclass">sometext</span>
<span class="someclass">some text 12345</span>
Однако, это дает мне ошибку:
<span class="someclass">some text's text</span>
Возвращенная ошибка:
Error: The expression is not a legal expression.
Source File: file:///blahblahblah.user.js
Line: (JS line i gave above)
Я нашел несколько результатов здесь и в Google, где говорилось о том, что у XPath есть проблемы с сущностями, но все они делали что-то вроде [text() = 'blah &racquo; blah']
- другими словами, их сущности находятся в самом запросе XPath. Мои нет, они в тексте, который я пытаюсь вернуть из запроса XPath.
Это та же проблема? Есть ли простой способ обойти это?
Спасибо!