XPath 테스터

문서와 표현식은 이 브라우저를 벗어나지 않습니다.

최대 1,000,000자의 XML 또는 HTML을 붙여넣으세요. 평가는 이 브라우저에서 XPath 1.0으로 실행됩니다.

절대 또는 상대 XPath 1.0 표현식을 입력하세요. 문서에 선언된 접두사는 자동으로 등록되며, 기본 네임스페이스는 접두사 d로 사용할 수 있습니다.

스크레이핑이나 XSLT용 XPath 작성은 바로 실행해 볼 샌드박스가 없으면 찍고 확인하기의 반복이 됩니다. 이 테스터는 한쪽 창에 XML 또는 HTML을, 다른 창에 표현식을 받아 브라우저 자체 엔진으로 XPath 1.0을 평가하고, 일치한 모든 노드를 종류, 속성, 텍스트 내용, 직렬화된 마크업과 함께 나열합니다. count(//book) 같은 스칼라 표현식은 값을 바로 반환하고, 문서에 선언된 네임스페이스 접두사는 자동으로 등록됩니다. 모든 처리는 브라우저에서 실행되며 문서는 절대 업로드되지 않습니다.

XPath 표현식 테스트 방법

  1. 1

    XML 또는 HTML 붙여넣기

    자동 감지가 HTML doctype이나 루트를 발견하면 관대한 HTML 파싱으로 전환합니다. XML 또는 HTML 모드를 직접 지정할 수도 있습니다.

  2. 2

    XPath 입력

    절대 경로(`/library/book`)든 상대 경로(`//div[@class='card']`)든 어떤 XPath 1.0 표현식이든 사용할 수 있습니다.

  3. 3

    평가

    브라우저의 XPath 엔진이 쿼리를 로컬에서 실행합니다. 서버로는 아무것도 전송되지 않습니다.

  4. 4

    결과 확인

    각 일치 항목은 노드 종류, 속성, 정리된 텍스트, 직렬화된 마크업을 보여 주며 최대 200개까지 나열됩니다.

XPath 1.0 핵심 표현식

표현식 일치 대상
/books/book 루트 <books>의 자식 <book>
//book 문서 어디에 있든 모든 <book>
//book[@id='42'] id 속성이 42인 <book>
//book[1] 각 부모의 첫 번째 <book>(문서 전체 아님)
(//book)[1] 문서 전체에서 첫 번째 <book>
//book[title='1984'] <title> 텍스트가 “1984”인 <book>
//book/@id 모든 <book> 요소의 id 속성
//book[position() > 1] 첫 번째를 제외한 모든 <book>
//book[last()] 부모별 마지막 <book>

스칼라 표현식도 동작합니다. count(//book)은 숫자를, string(//title)은 문자열을, boolean(//book[@id])은 true 또는 false를 반환합니다. 테스터는 이런 값을 노드 목록 대신 바로 보여 줍니다.

child 외에 자주 쓰는 축

  • ancestor::, 모든 조상 노드
  • following-sibling::, 현재 노드 뒤의 형제 노드
  • preceding-sibling::, 앞의 형제 노드
  • descendant::, 모든 자손 노드
  • attribute::(축약형 @), 현재 노드의 속성
  • parent::(축약형 ..), 부모 요소

HTML에서 주의할 점

HTML은 엄격한 XML이 아니므로, 테스터는 엄격한 XML 파서 대신 브라우저의 HTML 파서로 관대하게 파싱합니다. HTML 모드는 <!DOCTYPE html>이나 <html> 루트로 자동 감지되며, 선택기로 원하는 모드를 강제할 수도 있습니다. HTML 모드에서는 태그와 속성 이름이 소문자로 바뀌므로 XPath도 소문자로 작성하세요. //DIV[@CLASS]가 아니라 //div[@class]입니다.

네임스페이스

네임스페이스가 있는 XML은 접두사 등록이 필요합니다.

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <item>
    <content:encoded>...</content:encoded>
  </item>
</rss>

테스터는 문서에서 xmlns 선언을 찾아 모든 접두사를 자동으로 등록하므로 //content:encoded가 그대로 동작합니다. 기본 네임스페이스(접두사 없는 xmlns="...")는 문서 안에 접두사가 없으므로 테스터가 접두사 d에 바인딩합니다. 기본 네임스페이스 피드 안의 <item>//d:item으로 선택하세요. 등록된 바인딩은 결과 옆에 표시됩니다.

이 테스터가 평가하지 않는 것

브라우저는 대부분의 스크레이핑 스택이 사용하는 것과 같은 방언인 XPath 1.0을 평가합니다. matches(string, regex), tokenize(string, delimiter), for ... return 표현식, 시퀀스 연산자 같은 XPath 2.0 이후의 기능은 여기에 포함되지 않으며, XSLT 2.0/3.0 도구 체인에서 볼 수 있습니다. 웹 스크레이핑에서는 XPath 1.0이 여전히 가장 이식성 높은 선택입니다.

테스트 팁

  • 넓게 시작해 좁혀 가세요. 먼저 //div, 다음 //div[@class], 마지막으로 구체적인 class 값 순서로 좁힙니다.
  • 네임스페이스 선언을 확인하세요. “왜 내 XPath는 아무것도 반환하지 않지?” 하는 버그는 대부분 네임스페이스 문제입니다. 등록된 접두사 목록을 살펴보세요.
  • 대소문자에 주의하세요. XML은 대소문자를 구분합니다. HTML 모드는 이름을 소문자로 바꿉니다.
  • 텍스트를 추출할 때는 string()도 시험해 보세요. 중첩 마크업이 있으면 //p/text()string(//p)의 결과가 다릅니다.

자주 묻는 질문

아니요, XPath만 지원합니다. 대부분의 브라우저는 document.querySelectorAll(CSS)과 document.evaluate(XPath)로 둘 다 지원하므로, 작업에 더 명확한 쪽을 사용하세요.

HTML 파싱은 태그와 속성 이름을 소문자로 바꿉니다. XPath를 소문자로 작성했는지 확인하세요. //DIV[@CLASS]가 아니라 //div[@class]입니다. 모드도 확인하세요. 엉성한 HTML에 XML 모드를 강제하면 파싱 오류로 실패하지만, HTML 모드는 관대하게 파싱합니다.

문서에 선언된 접두사는 표현식에서 쓸 수 있도록 자동으로 등록됩니다. 기본 네임스페이스는 접두사 d에 바인딩되므로, 기본 네임스페이스 문서의 <item> 요소는 //d:item으로 선택합니다. 활성 바인딩은 결과와 함께 표시됩니다.

아니요. 문서와 표현식은 브라우저 자체 XPath 엔진이 평가하며, 저희 서버로 전송되거나 저장되지 않고 페이지 주소에 추가되지도 않습니다. 여러 단계 화면이 결과를 보여줄 수 있도록 이 브라우저 세션 안에만 남습니다.

관련 도구