2017-10-17 15 views
0

次のコードを使用して、電話番号を含むすべてのDOM要素を反復処理しています。このコードは、検索対象の電話番号文字列に括弧が含まれていない場合に機能しますが、XPATH contains()関数が括弧でくくられていると仮定します。誰も私がこれらの括弧をエスケープして、コードを再び動作させる方法について考えている人はいますか?XPATHでカッコをエスケープする(document.evaluate)

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(); 
    } 
} 

ありがとうございます!

答えて

0

なぜかっこでエラーが発生する原因はわかりません。症状は何ですか?

文字列連結によるXPath式を作成するのは悪いフォームです。主な理由としては、注射攻撃に晒されているため、使用するたびに式を再コンパイルする必要があります。変数を含む式を持ち、式を一度コンパイルし、式が実行されるたびにその変数の値を提供する方がはるかに優れています。

しかし、あなたはJavascriptを使っているので、あなたはSaxon-JSに移動しない限り、多くの選択肢がありません。

(後で)これを引き起こす原因についてもう一度考えてみると、いくつかの可能性が浮かび上がってきます。おそらく、電話番号のスペースは実際には改行されないスペースですか? DOMが正規化されておらず、電話番号が複数のテキストノードに分割されている可能性がありますか? (text()を使用しないでください。代わりに//*[contains(., '....')]を試してください)

関連する問題