대소문자를 구분하지 않는 XPath에 ()가 포함되어 있습니까?
DOM의 모든 텍스트 노드를 실행하고 있으며 nodeValue에 특정 문자열이 포함되어 있는지 확인합니다.
/html/body//text()[contains(.,'test')]
대소문자 구분입니다.하지만 나도 잡고싶습니다.Test
,TEST
아니면TesT
. XPath (JavaScript)로 가능합니까?
XPath 1.0용입니다.현재 환경에서 XPath 2.0을 지원하는 경우 여기를 참조하십시오.
네, 가능하지만 아름답지는 않아요
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
이렇게 하면 알파벳을 미리 알고 있는 검색 문자열에 사용할 수 있습니다.예상되는 악센트 문자를 추가합니다.
가능하다면 텍스트를 에 둘러싸는 것과 같은 다른 방법으로 흥미를 끌 수 있는 텍스트를 표시합니다.<span>
HTML을 구축하는 동안 특정 클래스가 있습니다. 그런 것들은 요소 텍스트의 서브스트링보다 XPath로 찾기가 훨씬 쉽습니다.
옵션이 아닌 경우, JavaScript(또는 XPath를 실행하는 데 사용하는 다른 호스트 언어)를 통해 동적 XPath 표현식을 만들 수 있습니다.
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의 대답에 대한 해트 팁 - 물론 실제로 찾고 있는 캐릭터만 번역하면 됩니다.)
이 접근 방식은 알파벳에 대한 사전 지식을 필요로 하지 않고 어떤 검색 문자열에도 효과가 있을 것입니다. 이것은 큰 이점입니다.
검색 문자열이 작은 따옴표를 포함할 수 있는 경우 위의 두 가지 방법 모두 실패하고, 이 경우에는 일이 더 복잡해집니다.
최신 XPath 2.0 이상 솔루션
소문자() 사용:
/html/body//text()[contains(lower-case(.),'test')]
대소문자를 구분하지 않는 플래그와 성냥들 regex matching을 사용합니다.
/html/body//text()[matches(.,'test', 'i')]
이전 XPath-1.0 제한 환경은translate()
@Tomalak의 답변에 기술되어 있는 기술.
대소문자 구분 안 함contains
/html/body//text()[contains(translate(., 'EST', 'est'), 'test')]
네. 사용하시면 됩니다.translate
다음과 같이 일치시킬 텍스트를 소문자로 변환합니다.
/html/body//text()[contains(translate(.,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'),
'test')]
XPath 2.0을 사용하는 경우 ()를 포함할 세 번째 인수로 모음을 지정할 수 있습니다.그러나 대조 URI는 표준화되어 있지 않기 때문에 자세한 내용은 사용하는 제품에 따라 다릅니다.
앞서 translate()를 사용하여 제공한 솔루션은 모두 26자 영어 알파벳만 사용한다고 가정합니다.
업데이트: XPath 3.1은 대소문자 구분 매칭을 위한 표준 대조 URI를 정의합니다.
제가 항상 하던 방식은 XPath에서 "번역" 기능을 사용하는 것이었습니다.아주 예쁘다고는 하지 않겠지만, 제대로 작동합니다.
/html/body//text()[contains(translate(.,'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'TEST')]
이게 도움이 되길 바라면서,
언급URL : https://stackoverflow.com/questions/8474031/case-insensitive-xpath-contains-possible
'programing' 카테고리의 다른 글
문자 및 ASCII 코드를 C로 인쇄 (0) | 2023.09.21 |
---|---|
테이블 행에 테두리-아래쪽 추가 (0) | 2023.09.21 |
안드로이드의위젯.스위치 켜기/끄기 이벤트 수신기? (0) | 2023.09.21 |
Angular에서 버튼을 비활성화하려면 어떻게 해야 합니까?배열에 요소가 있는 경우 JS? (0) | 2023.09.21 |
Knex.js는 sql injection을 방지합니까? (0) | 2023.09.21 |