簡體   English   中英

在XPATH中轉義括號(document.evaluate)

[英]Escaping parentheses in XPATH (document.evaluate)

我正在使用以下代碼遍歷包含電話號碼的所有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();
    }
}

謝謝!

我不明白為什么括號會導致失敗。 有什么症狀?

請注意,通過字符串串聯構造XPath表達式是錯誤的形式。 主要原因有兩個:遭受注入攻擊,並且每次使用表達式時都必須重新編譯它。 最好讓表達式包含變量,將表達式編譯一次,並在每次執行表達式時為變量提供一個值。

但是您使用的是Javascript,因此您可能沒有太多選擇(當然,除非您轉向Saxon-JS)。

(稍后)再次考慮可能導致這種情況的原因,想到了兩種可能性。 也許電話號碼中的空格實際上是不間斷的空格? 也許DOM沒有規范化,電話號碼分散在多個文本節點上? (始終最好避免使用text() 。而應嘗試//*[contains(., '....')] 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM