![](/img/trans.png)
[英]Puppeteer: How to evaluate xpath with 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.