본문 바로가기
[IT]

XPath 표현식

by DDBobD 2024. 4. 30.
728x90
반응형

Web, Mobile 자동화를 할 때, element로 id 또는 XPath를 사용하는데, id는 Object의 고유 값이기 때문에 사용하는데 큰 문제는 없지만 XPath의 경우 XML의 경로로 그 값을 그대로 사용했을 경우 경로의 길이가 길어 코드의 가독성이 떨어지기 때문에 이를 함축적으로 표현해야 하는 경우가 있다. 이에 대한 경로 표현식과 필터 표현식을 소개하려 한다.

 

 

XPath란

XML Path Language로 XML 문서의 특정 요소나 속성에 접근하기 위한 경로를 지정하는 언어.

<shop city="서울" type="마트">
	<food>
    	<name>귤</name>
        <sort>과일</sort>
        <cost>3000</cost>
    </food>
    <food>
    	<name>상추</name>
        <sort>야채</sort>
        <cost>2000</cost>
    </food>
</shop>

 

  • 특징
    • XML 문서를 탐색하기 위해 경로 표현식(path expression)을 사용
    • 수학, 문자열 처리 등을 하기 위한 표준 함수 라이브러리를 내장

  • 노드 형식
    • 루트 노드
    • 요소 노드
    • 텍스트 노드
    • 속성 노드
    • 주석 노드
    • 네임스페이스 노드
    • 처리 명령 노드

  • 노드의 관계
    • 부모 노드
    • 자식 노드(첫 번째, 마지막)
    • 형제 노드(이전, 다음)

 

 

경로 표현식

  • 절대 경로 : 슬래시( / )로 시작하며, 루트 노드부터 순서대로 탐색
    ex)/html/body/div[2]/div[1]/div[3]/p[11]/strong
  • 상대 경로 : 슬래시( / )로 시작되지 않으며, 기준 노드부터 탐색
    ex>//p/strong[text()="TEXT"]
경로 연산자 설명
노드 이름 노드 이름과 일치하는 모든 노드를 선택
/ 루트 노드부터 순서대로 탐색
// 현재 노드의 우치와 상관없이 지정된 노드부터 순서대로 탐색
. 현재 노드를 선택
.. 현재 노드의 부모 노드를 선택
@ 속성 노드를 선택

 

검색 방향 설명
self 현재 노드를 선택
attribute 현재 노드의 속성 노드를 모두 선택
namespace 현재 노드의 네임스페이스 노드를 모두 선택
child 현재 노드의 자식 노드를 모두 선택
descendant 현재 노드의 자손 노드를 모두 선택
descendant-or-self 현재 노드와 현재 노드의 자손 노드를 모두 선택
following 현재 노드의 종료 태그 이후 등장하는 모든 노드를 선택
following-sibling 현재 노드 이후에 위치하는 형제 노드를 모두 선택
parent 현재 노드의 부모 노드를 선택
ancestor 현재 노드의 조상 노드를 모두 선택
ancestor-or-self 현재 노드와 현재 노드의 조상 노드를 모두 선택
preceding 현재 노드 이전에 등장하는 모든 노드를 선택
preceding-sibling 현재 노드 이전에 위치하는 형제 노드를 모두 선택

 

 

필터 표현식

  • 대괄호( [ ] ) 안에 표현
XPath 함수 설명
position() 현재 노드셋 안에서의 노드의 위치를 반환함
last() 현재 노드셋의 마지막 노드를 반환함
count(경로) 지정된 노드셋의 총 노드 개수를 반환함
name() 현재 노드의 이름을 반환함
name(경로) 지정된 노드셋의 첫 번째 노드를 반환함
contains() 특정 문자열이 포함된 노드의 위치를 반환함
starts-with() 특정 문자열로 시작되는 노드의 위치를 반환함

 

임의 문자 기호 설명
* 어떠한 요소 노드와도 일치함
@* 어떠한 속성 노드와도 일치함
node() 어떠한 종류의 어떤 노드와도 일치함
text() 어떠한 텍스트 노드와도 일치함

 

연산자 설명
and 논리 AND 연산
or 논리 OR 연산
| 여러개의 노드셋을 동시에 계산
<, <=, >, >= 비교 연산

 

728x90
반응형

'[IT]' 카테고리의 다른 글

[ChatGPT] API 사용방법 - Python  (0) 2024.05.16
[ChatGPT] API 사용방법 - Playground  (0) 2024.05.10
[네이버] API 사용방법  (0) 2024.04.08
[구글 클라우드 플랫폼] 구독하기  (0) 2024.03.05
pyinstaller 사용하기  (2) 2024.02.27