xpath에서 대소 문자를 구분하지 않는 일치?
예를 들어, 아래 xml의 경우
<CATALOG>
<CD title="Empire Burlesque"/>
<CD title="empire burlesque"/>
<CD title="EMPIRE BURLESQUE"/>
<CD title="EmPiRe BuRLeSQuE"/>
<CD title="Others"/>
<CATALOG>
처음 4 개의 레코드를 //CD[@title='empire burlesque']
. 이것을 수행하는 xpath 기능이 있습니까? PHP 기능과 같은 다른 솔루션도 허용됩니다.
XPath 2에는 소문자 (및 대문자) 문자열 함수가 있습니다. 대소 문자를 구분하지 않는 것과 같지는 않지만 충분히 가까울 것입니다.
//CD[lower-case(@title)='empire burlesque']
XPath 1을 사용하는 경우 translate를 사용 하는 해킹이 있습니다.
matches () 는 대소 문자를 구분하지 않는 정규식 일치를 허용하는 XPATH 2.0 함수입니다.
의 한 플래그 입니다 i
대소 문자를 구별 매칭.
대소 문자를 구분하지 않는 플래그와 함께 matches () 함수를 사용하는 다음 XPATH :
//CD[matches(@title,'empire burlesque','i')]
가능한 PHP 솔루션 :
// load XML to SimpleXML
$x = simplexml_load_string($xmlstr);
// index it by title once
$index = array();
foreach ($x->CD as &$cd) {
$title = strtolower((string)$cd['title']);
if (!array_key_exists($title, $index)) $index[$title] = array();
$index[$title][] = &$cd;
}
// query the index
$result = $index[strtolower("EMPIRE BURLESQUE")];
Chrome 개발자 도구에서 요소를 찾을 수 없습니다. 화면에서 '제출'버튼을 찾고 있습니다.
//input[matches(@value,'submit','i')]
그러나 '번역'을 사용하여 모든 대문자를 아래와 같이 작은 작품으로 대체합니다.
//input[translate(@value,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'submit']
업데이트 : '일치'가 작동하지 않는 이유를 방금 찾았습니다. 구문 '일치'를 이해하지 못하는 xpath 1.0과 함께 Chrome을 사용하고 있습니다. xpath 2.0이어야합니다.
PHP 솔루션이 수용 가능하다고 언급했으며 PHP는 XPath v1.0 만 지원하더라도이를 수행 할 수있는 방법을 제공합니다. PHP 함수 호출을 허용하도록 XPath 지원을 확장 할 수 있습니다.
$xpathObj = new DOMXPath($docObj);
$xpathObj->registerNamespace('php','http://php.net/xpath'); // (required)
$xpathObj->registerPhpFunctions("strtolower"); // (leave empty to allow *any* PHP function)
$xpathObj->query('//CD[php:functionString("strtolower",@title) = "empire burlesque"]');
더 많은 예제 는 PHP registerPhpFunctions 문서를 참조하십시오 . 기본적으로 "php : function"은 부울 평가 용이고 "php : functionString"은 문자열 평가 용임을 보여줍니다.
참고URL : https://stackoverflow.com/questions/2893551/case-insensitive-matching-in-xpath
'program story' 카테고리의 다른 글
onActivityResult RESULT_OK를 Android의 변수로 해결할 수 없습니까? (0) | 2020.11.13 |
---|---|
ConstraintLayout : 프로그래밍 방식으로 제약 조건 변경 (0) | 2020.11.13 |
각 매개 변수에서 후행 슬래시를 제거하는 가장 간단한 방법은 무엇입니까? (0) | 2020.11.13 |
이 var 문자열을 신속하게 NSURL로 변환하는 방법 (0) | 2020.11.13 |
Windows 업데이트 후“ 'System.Web.Mvc'네임 스페이스에 'Html'유형 또는 네임 스페이스 이름이 없습니다.” (0) | 2020.11.13 |