首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转义XPATH中的括号(document.evaluate)

转义XPATH中的括号(document.evaluate)
EN

Stack Overflow用户
提问于 2017-10-18 04:25:09
回答 1查看 725关注 0票数 0

我使用以下代码遍历所有包含电话号码的DOM元素。当要搜索的电话号码字符串中没有任何圆括号时,此代码可以正常工作,但我假设圆括号搞乱了XPATH contains()函数。有没有人知道我如何摆脱这些括号,让代码再次工作?

代码语言:javascript
复制
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();
    }
}

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-10-18 07:35:02

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46798621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档