Daily Develope

[Web] XPath 간단 정리 본문

Develope/Web

[Web] XPath 간단 정리

noggame 2023. 5. 9. 13:52

기술 (Description)

: root인 html 노드부터 시작해 찾으려는 노드까지의 경로를 기술해 필요한 노드를 선택하기위해 사용

표기법 설명
/ root 노드로부터의 경로
// 현재 노드로부터 찾는 Element의 경로 생략
. 현재 노드
.. 부모 노드
@ 속성 선택

문법 (Syntax)

: '[]' 대괄호로 명시하며, 조건문은 대괄호 안에 기재한다.

예시 설명
/html/body/div[1] body의 첫번째 div 선택
/html/body/div[last()] body의 마지막 div 선택
//div[@class="section01"] root로부터 모든 div 중 class가 section01로 정의된 div들만 선택
/html/body/div[@class="section01"]/p body의 div 중 class가 section01로 정의된 div의 p 선택

Wildcard

예시 설명
//* root아래의 모든 노드 선택
/html/body/div[1]/* body의 첫 번째 div의 모든 자식노드 선택

Axes

명칭 설명
attribute 현재 노드의 모든 속성 선택
namespace 현재 노드의 모든 namespace 노드 선택
self 현재 노드 선택
ancestor 현재 노드의 모든 상위노드 선택
ancestor-or-self 현재 노드를 포함한 모든 상위노드 선택
descendant 현재 노드의 모든 하위노드 선택
descendant-or-self 현재 노드를 포함한 모든 하위노드 선택
parent 현재 노드의 부모 노드 선택
child 현재 노드의 자식 노드 선택
following 현재 노드가 끝나는 지점부터 문서의 끝 부분 까지의 전체 노드 선택
following-sibling 현재 노드 이후의 모든 형제 노드
preceding 전체 문서에서 현재 노드의 이전의 모든 노드 선택 (조상, 속성, namespace 노드 제외)
preceding-sibling 현재 노드 이전의 모든 형제 노드

예시)

//ul[1]/li[1]/span/self::text() = 첫 번째 ul의 첫 번째 li 내부 span 텍스트 선택
//td[1]/following-sibling::td[2] = 첫 번째 td를 제외한 이후의 형제 td들 중 두 번째 선택

조건문 (Condition)

Contains

: 조건을 포함하는 노드 선택

예1) img의 class로 dog값이 설정된 img 노드만 선택
//img[contains(@class, "dog")]

예2) p 노드 중 "my name" 텍스트를 포함하는 노드만 선택
//p[conatins(text(), "my name")]

Not

: 부정 / 제외

예) img의 class로 dog값이 설정된 img 노드만 제외하고 선택
//img[not(contains(@class, "dog"))]

Or

: 만족하는 조건들을 모두 선택

예) img의 class로 dog값이나 cat값으로 설정된 img 노드 모두 선택
//img[contains(@class, "dog") or contains(@class, "cat")]

And

: 모든 조건을 만족하는 노드 선택

예) img의 class로 dog값과 bark값이 모두 설정된 img 노드 선택
//img[contains(@class, "dog") and contains(@class, "bark")]

Google Chrome 디버그 모드에서 Xpath 사용

1. F12를 눌러 디버그모드 활성화
2. Console 탭에서 아래와 같이 입력
$x('xpath조건문')

#예) li중에서 자식 div가 text값으로 abc를 가지는 li만 추출
$x('//li[contains(div/text(), "abc")]')

Ref.

w3schools
블로그_01

Comments