【问题标题】:Escaping parentheses in XPATH (document.evaluate)XPATH 中的转义括号(document.evaluate)
【发布时间】:2017-10-17 20:25:08
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: javascript xpath document.evaluate


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2015-08-27
      • 2011-06-27
      • 2012-02-16
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多