Development Tip

부모가 아닌 텍스트를 포함하는 요소 만 반환하는 XPath

yourdevel 2020. 11. 7. 10:35
반응형

부모가 아닌 텍스트를 포함하는 요소 만 반환하는 XPath


이 XML에서 'match'(random2 요소)를 포함하는 요소를 일치시키고 싶습니다.

<root>
 <random1>
  <random2>match</random2>
  <random3>nomatch</random3>
 </random1>
</root>

좋아, 지금까지 내가 가지고있다.

//[re:test(.,'match','i')] (with re in the proper namespace)

이것은 random2, random1 및 root를 반환합니다. "random2"만 얻고 싶습니다.

어떤 아이디어?


"일치" 포함 하거나 "일치"와 같은 요소를 찾고 싶 습니까?

이렇게하면 '일치'와 같은 텍스트 노드가있는 요소를 찾습니다 (의 선행 및 후행 공백으로 인해 요소와 일치하지 않음 random2).

//*[text()='match']

이것은 선행 및 후행 공백 (matches random2) 을 제거한 후 "일치"와 동일한 텍스트 노드가있는 모든 요소를 ​​찾습니다 .

//*/text()[normalize-space(.)='match']/parent::*

그러면 텍스트 노드 값 ( random2일치 random3)에 '일치'가 포함 된 모든 요소를 ​​찾습니다 .

//*[contains(text(),'match')]

XPATH 2.0 솔루션은 'match'를 포함하는 텍스트 노드를 찾고 문자열의 시작 (예 :) ^또는 단어 경계 (예 :)에서 시작하고 문자열 \W의 끝으로 끝나는 match () 함수와 정규식 패턴을 사용 합니다. (예 $) 또는 단어 경계. 세 번째 매개 변수 i는 대소 문자를 구분하지 않는 정규식 패턴을 평가합니다. (일치 random2)

//*[matches(text(),'(^|\W)match($|\W)','i')]

시험

//re:*[. ='match']

참고 URL : https://stackoverflow.com/questions/2994198/xpath-to-return-only-elements-tained-the-text-and-not-its-parents

반응형