0

我正在使用以下代码来遍历所有包含电话号码的 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();
    }
}

谢谢!

4

1 回答 1

0

我不明白为什么括号会导致失败。有什么症状?

请注意,通过字符串连接构造 XPath 表达式是不好的形式。两个主要原因:您面临注入攻击,并且每次使用时都必须重新编译表达式。最好有包含变量的表达式,编译一次表达式,并在每次执行表达式时为变量提供一个值。

但是您使用的是 Javascript,因此您可能没有太多选择(当然,除非您转向 Saxon-JS)。

(后来)再次考虑可能导致这种情况的原因,我想到了几种可能性。也许电话号码中的空格实际上是不间断的空格?也许 DOM 没有标准化,电话号码被分割到多个文本节点?(最好避免使用text().//*[contains(., '....')]改用。)

于 2017-10-17T23:35:02.113 回答