我使用以下代码遍历所有包含电话号码的DOM元素。当要搜索的电话号码字符串中没有任何圆括号时,此代码可以正常工作,但我假设圆括号搞乱了XPATH contains()函数。有没有人知道我如何摆脱这些括号,让代码再次工作?
var oldPhoneNumber = '(123) 456-7890';
if (document.evaluate) {
var nextElement = document.evaluate("//text()[contains(.,\"" + oldPhoneNumber + "\")]", document, null, XPathResult.ANY_TYPE, null).iterateNext();
while (nextElement) {
nextElement = document.evaluate("//text()[contains(.,\"" + oldPhoneNumber + "\")]", document, null, XPathResult.ANY_TYPE, null).iterateNext();
}
}谢谢!
发布于 2017-10-18 07:35:02
我不明白为什么括号会导致失败。症状是什么?
请注意,通过字符串连接来构造XPath表达式不是一种好的形式。两个主要原因:您面临注入攻击,并且每次使用表达式时都必须重新编译它。更好的做法是使用包含变量的表达式,只编译一次表达式,并在每次执行表达式时为变量提供一个值。
但是您使用的是Javascript,所以您可能没有太多的选择(当然,除非您迁移到Saxon-JS )。
(后来)再次思考可能导致这种情况的原因,脑海中浮现出几种可能性。也许电话号码中的空格实际上是不间断的空格?也许DOM没有标准化,电话号码被拆分到多个文本节点?(最好避免使用text()。请尝试使用//*[contains(., '....')]。)
https://stackoverflow.com/questions/46798621
复制相似问题