대소 문자를 구분하지 않는 xpath contains () 가능?
내 DOM의 모든 텍스트 노드에서 실행 중이며 nodeValue에 특정 문자열이 포함되어 있는지 확인합니다.
/html/body//text()[contains(.,'test')]
대소 문자를 구분합니다. 그러나 나는 또한 Test
, TEST
oder TesT
. XPath (JavaScript)로 가능합니까?
이것은 XPath 1.0 용입니다. 사용자 환경에서 XPath 2.0을 지원하는 경우 여기를 참조 하십시오 .
예. 가능하지만 아름답지는 않습니다.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
가능하면 <span>
특정 클래스가있는 텍스트를 포함하는 것과 같은 다른 방법으로 관심있는 텍스트 부분을 표시하십시오 .
이것이 가능하지 않은 경우 적절한 XPath 표현식을 작성하는 데 JavaScript를 사용할 수 있습니다.
function xpathPrepare(xpath, searchString) {
return xpath.replace("$u", searchString.toUpperCase())
.replace("$l", searchString.toLowerCase())
.replace("$s", searchString.toLowerCase());
}
xp = xpathPrepare("//text()[contains(translate(., '$u', '$l'), '$s')]", "Test");
// -> "//text()[contains(translate(., 'TEST', 'test'), 'test')]"
( @KirillPolishchuk의 답변에 대한 모자 팁 -물론 실제로 검색 하는 문자 만 번역하면됩니다 )
더 아름다운:
/html/body//text()[contains(translate(., 'TES', 'tes'), 'test')]
XPath 2.0 솔루션
사용 ) (소문자를 :
/html/body//text()[contains(lower-case(.),'test')]
대소 문자를 구분하지 않는 플래그와 일치하는 matches () 정규식을 사용하십시오 .
/html/body//text()[matches(.,'test', 'i')]
예. translate
다음과 같이를 사용하여 일치시킬 텍스트를 소문자로 변환 할 수 있습니다 .
/html/body//text()[contains(translate(.,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'),
'test')]
XPath 2.0을 사용하는 경우 contains ()에 대한 세 번째 인수로 데이터 정렬을 지정할 수 있습니다. 그러나 데이터 정렬 URI는 표준화되지 않으므로 세부 정보는 사용중인 제품에 따라 다릅니다.
이전에 translate ()를 사용하여 제공된 솔루션은 모두 26 자 영어 알파벳 만 사용한다고 가정합니다.
업데이트 : XPath 3.1은 대소 문자 구분없이 일치하는 표준 데이터 정렬 URI를 정의합니다.
내가 항상이 작업을 수행 한 방법은 XPath에서 "번역"기능을 사용하는 것입니다. 나는 그다지 예쁘다고 말하지는 않을 것이지만 올바르게 작동합니다.
/html/body//text()[contains(translate(.,'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLOMNOPQRSTUVWXYZ'),'TEST')]
도움이 되었기를 바랍니다,
참고 URL : https://stackoverflow.com/questions/8474031/case-insensitive-xpath-contains-possible
'developer tip' 카테고리의 다른 글
Javascript의 값으로 연관 배열을 정렬하는 방법은 무엇입니까? (0) | 2020.09.23 |
---|---|
포토샵은 두 이미지를 어떻게 혼합합니까? (0) | 2020.09.23 |
자바 스크립트 사전에서 키 컬렉션을 얻는 방법은 무엇입니까? (0) | 2020.09.23 |
EC2 인스턴스를 재부팅하면 어떻게됩니까? (0) | 2020.09.22 |
자바 : 재정의 된 메서드를 호출하는 슈퍼 메서드 호출 (0) | 2020.09.22 |