2017-10-17 2 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 표현식을 구성하는 것은 나쁜 형식이라는 점에 유의하십시오. 두 가지 주된 이유 : 주입 공격에 노출되어 있으며 매번 사용되는 식을 다시 컴파일해야합니다. 변수를 포함하는 표현식을 사용하고, 표현식을 한 번 컴파일하고, 표현식이 실행될 때마다 변수에 값을 제공하는 것이 훨씬 좋습니다.

하지만 자바 스크립트로되어 있으므로 선택의 여지가 없을 수 있습니다 (물론 Saxon-JS로 이동하지 않는 한).

(나중에)이 문제의 원인에 대해 다시 생각해 보면 몇 가지 가능성이 있습니다. 아마도 전화 번호의 공백은 실제 공백이 아닌 공백입니까? 아마도 DOM이 정규화되지 않았고 전화 번호가 여러 텍스트 노드로 분할 되었습니까? 항상 text()을 사용하지 않는 것이 가장 좋습니다. 대신 //*[contains(., '....')]을 시도해보십시오.