XPath 표현식 테스트 방법
- XML을 붙여넣거나, 파일을 열거나, 샘플 상품 카탈로그를 사용합니다.
- XPath 표현식을 입력하거나 예시 중 하나를 클릭합니다. 입력하는 대로 결과가 갱신되며, Enter 키를 누르면 즉시 실행됩니다.
- 결과를 확인합니다: 일치하는 노드의 개수와 각 노드의 유형·내용, 또는 표현식이 반환하는 숫자, 문자열, 불리언 값이 표시됩니다.
XPath 문법 치트 시트
| 표현식 | 선택 대상 |
|---|---|
/catalog | 루트 요소 catalog |
//product | 깊이에 상관없이 모든 product 요소 |
/catalog/product/name | 루트부터 단계별로 내려간 각 상품의 name |
//product/@id | 모든 상품의 id 속성 |
//product[@category='books'] | category 속성이 books인 상품 |
//product[price > 20] | 가격이 20보다 큰 상품(숫자로 비교) |
//product[contains(name, 'USB')] | 이름에 “USB”가 들어간 상품(대소문자 구분) |
//product[not(tags)] | tags 하위 요소가 없는 상품 |
(//product)[1] | 문서 전체에서 첫 번째 상품 |
//product[1] | 각 부모 요소 안의 첫 번째 상품 |
//product[last()] | 각 부모 요소 안의 마지막 상품 |
//name/text() | name 안의 텍스트 노드 |
//price/.. | 각 price의 부모 요소 |
//*[local-name()='product'] | 네임스페이스와 관계없이 모든 product 요소 |
count(//product) | 상품 개수 |
sum(//price) | 모든 가격의 합계 |
string(//product[1]/name) | 첫 번째 상품 이름(문자열) |
XPath의 네임스페이스
XPath 1.0에는 기본 네임스페이스 개념이 없습니다. 사이트맵이나 NF-e 인보이스처럼 xmlns="…" 선언이 있는 문서에서는 요소가 그 네임스페이스에 속하므로 //url 표현식으로는 아무것도 찾을 수 없습니다. 그래서 테스터는 기본 네임스페이스를 x: 접두사에 연결하고(x 접두사가 이미 쓰이고 있으면 d:), //x:url/x:loc처럼 쓸 수 있게 합니다. CFDI 인보이스의 cfdi:처럼 문서에 선언된 접두사는 그대로 사용할 수 있습니다. 네임스페이스를 설정할 수 없는 도구에서는 //*[local-name()='url'] 형태가 어디서나 통합니다.
자주 묻는 질문
어떤 XPath 버전을 지원하나요?
모든 브라우저와 대부분의 XML 라이브러리에 내장된 XPath 1.0을 지원합니다. matches(), lower-case(), string-join() 같은 XPath 2.0 이후의 함수는 사용할 수 없습니다.
XPath 결과가 아무것도 나오지 않는 이유는 무엇인가요?
가장 흔한 원인은 기본 네임스페이스(예시 아래에 표시된 x: 접두사를 사용하세요), 대소문자 차이(XPath는 대소문자를 구분합니다), 그리고 위치 번호입니다. 위치는 0이 아니라 1부터 시작합니다.
결과는 몇 개까지 표시되나요?
일치하는 항목은 모두 개수가 집계되며, 처음 500개는 노드 유형·내용과 함께 목록으로 표시됩니다.
XML이 업로드되나요?
아니요. XML 파싱과 쿼리는 브라우저에서 실행됩니다. URL에서 불러오는 경우에만 서버를 거쳐 파일을 가져옵니다.