我正在编写一个相当基本的 GreaseMonkey 脚本,该脚本在特定元素中定位文本,然后使用该文本稍后执行操作。相关代码位如下:
在 HTML 中有一个带有“someclass”类的 span,其中包含一小段文本:
<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 查询返回的文本中。
这是同样的问题吗?有什么简单的方法吗?
谢谢!