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 |