XPath는 HTML과 XML과 같은 트리 구조 데이터에서 필요한 정보를 정확하고 효율적으로 명시하고 추출하는 기술입니다.
XPath 개요
XPath는 XML 또는 HTML 문서 트리에서 특정 요소와 속성을 지정하고 추출하는 데 사용되는 언어입니다. 웹페이지가 종종 HTML로 구성되기 때문에, XPath는 웹 스크래핑, 데이터 검색, XML 데이터 검색 등 다양한 시나리오에서 널리 사용됩니다.
일반적인 사용법은 다음과 같습니다:
- 웹 크롤러에서의 데이터 추출: XPath는 전자상거래 웹사이트의 제품 정보나 뉴스 웹사이트의 기사 제목과 같은 특정 데이터를 자동으로 가져오는 데 사용됩니다.
- XML 데이터 검색 및 처리: 비즈니스 시스템 및 데이터 링크 처리에서는 데이터가 종종 XML 형식으로 교환됩니다. XPath를 사용하면 방대한 XML 데이터에서 필요한 정보를 효율적으로 추출할 수 있습니다.
- API 응답 구문화 (XML 형식): SOAP와 같은 XML 기반 API를 사용할 때, XPath는 응답 데이터를 파싱하는 데 사용됩니다. 이를 통해 특정 상태 코드와 결과 데이터를 빠르게 얻을 수 있어 시스템 통합 및 자동 처리의 정확도를 향상시킵니다.
도구 추천
XPath를 배우고 사용하는 과정에서 일반적으로 사용되는 도구들은 다음과 같습니다:
Chrome 개발자 도구: Chrome 브라우저에 기본으로 포함된 강력한 도구로, F12 키를 눌러 호출할 수 있습니다. "요소" 패널에서는 웹 페이지 내 HTML 요소를 마우스 올리고 클릭하여 빠르게 찾을 수 있으며, 요소를 우클릭하면 XPath 표현식을 직접 복사해 쉽게 검증하고 테스트할 수 있습니다. 예를 들어, 전자상거래 제품 페이지를 분석할 때 Chrome 개발자 도구를 사용해 제품명, 가격 및 기타 요소에 대해 빠르게 XPath를 얻을 수 있습니다. 파이어폭스 개발자 도구: 브라우저에 기본으로 포함되어 있으며, 크롬 개발자 도구와 유사합니다. 또한 페이지 내 요소를 쉽게 찾을 수 있고, XPath 표현식을 보고 테스트할 수 있습니다. 이 방법은 파이어폭스 브라우저에 익숙한 개발자들에게 좋은 선택입니다. 온라인 XPath 테스트 도구: "XPath Tester"와 같은 온라인 도구는 설치 없이도 사용할 수 있으며, 웹페이지를 열어 사용할 수 있습니다. XML 또는 HTML 문서의 내용을 붙여넣고 XPath 표현식을 입력하면 실시간으로 매칭 결과를 확인할 수 있습니다. 이 도구는 초보자가 빠르게 시작하고 간단한 XPath 연습을 하기에 특히 적합합니다. XPath 헬퍼 플러그인: 크롬 브라우저를 예로 들면, XPath 헬퍼 플러그인을 설치하면 웹 브라우징 시 브라우저 인터페이스에 플로팅 창이 추가되어 현재 마우스 오버 요소의 XPath 경로를 표시하고, 창에서 직접 XPath 표현식을 편집하고 테스트할 수 있어 개발 효율이 크게 향상됩니다.
XPath 추상 구문
노드를 선택하세요
XPath는 경로 표현식을 사용하여 XML 문서에서 노드를 선택합니다. 노드는 경로나 단계를 따라 선택됩니다. 가장 유용한 경로 표현식은 아래에 나열되어 있습니다:
식 | 묘사 | | 노드네임 | 이 노드의 모든 자식 노드를 선택합니다. | | / | 루트 노드에서 선택하세요(자식 노드를 가져가세요). | | // | 문서 내 노드를 위치와 상관없이 현재 선택된 노드에서 선택합니다(후손 노드 참조). | | . | 현재 노드를 선택하세요. | | .. | 현재 노드의 부모 노드를 선택하세요. | | @ | 속성을 선택하세요. |
아래 표에는 몇 가지 경로 식과 그 결과가 나열되어 있습니다:
경로 표현식 | 결과 | | 서점 | 서점이 명명된 모든 노드를 선택하세요. | | /bookstore | 루트 요소 서점(Root Element Bookstore)을 선택하세요. 참고: 경로가 앞 슬래시( / )로 시작하면 이 경로는 항상 원소로 가는 절대 경로를 나타냅니다! | | 서점/서적 | 서점의 아동 요소인 모든 책 요소를 선별합니다. | | //book | 문서 내 위치에 상관없이 모든 책의 하위 요소를 선택합니다. | | 서점//책 | 서점 요소의 후손인 모든 책 요소를 선택하세요. 서점 내 위치에 상관없이 말이죠. | | @lang | lang이 명명된 모든 속성을 선택하세요. |
조건자
술어는 특정 노드나 지정된 값을 포함하는 노드를 찾는 데 사용됩니다. 술어는 대괄호 안에 포함되어 있습니다. 아래 표에는 술어가 포함된 경로 표현식과 그 결과들을 나열합니다:
경로 표현식 | 결과 | | /bookstore/book[1] | 서점 자식 요소에 속하는 첫 번째 책 요소를 선택하세요. | | /bookstore/book[last()] | 서점의 하위 요소에 속하는 마지막 책 요소를 선택합니다. | | /bookstore/book[last()-1] | 서점 어린이 요소에 속하는 마지막에서 두 번째 책 요소를 선택합니다. | | /bookstore/book[position()<3] | 서점 요소의 자식 요소인 첫 두 가지 책 요소를 선택하세요. | | 제목[@lang] | lang이라는 속성을 가진 모든 타이틀 요소를 선택합니다. | | 제목[@lang='영어'] | 영어 값이 있는 lang 속성을 가진 모든 타이틀 요소를 선택합니다. | | /bookstore/book[price>35.00] | 서점 요소의 모든 책 요소를 선택하며, 가격 요소의 가치는 35.00보다 커야 합니다. | | /bookstore/book[price>35.00]//title | 서점 요소의 책 요소 제목 요소를 모두 선택하며, 가격 요소의 가치는 35.00보다 커야 합니다. |
알 수 없는 노드를 선택하세요
XPath 와일드카드는 알려지지 않은 XML 요소를 선택하는 데 사용할 수 있습니다.
와일드 카드 | 묘사 | | * | 모든 요소 노드와 일치합니다. | | @* | 어떤 속성 노드든 일치합니다. | | node() | 어떤 종류의 노드든 일치합니다. |
아래 표에는 몇 가지 경로 표현식과 이 표현식들의 결과를 나열합니다:
경로 표현식 | 결과 | | /bookstore/* | 서점 요소의 모든 자식 요소를 선택합니다. | | //* | 문서 내 모든 요소를 선택합니다. | | 제목[@*] | 모든 타이틀 요소를 속성으로 선택합니다. |
여러 경로를 선택하세요
경로 표현식에서 "|"를 사용하여 운영자분들, 여러 경로를 선택할 수 있습니다.
아래 표에는 몇 가지 경로 표현식과 이 표현식들의 결과를 나열합니다:
경로 표현식 | 결과 | | //book/title | //book/price | 책 요소의 모든 제목과 가격 요소를 선택하세요. | | 제목 | 값 | 문서에서 모든 제목과 가격 요소를 선택하세요. | | /bookstore/book/title | //price | 서점 요소에 속하는 책 요소의 모든 제목 요소와 문서 내 모든 가격 요소를 선택합니다. |
XPath 함수
다음은 핵심 XPath 함수와 XSLT에 의한 XPath 특화 추가 요소들의 주석 목록으로, 설명, 문법, 매개변수 목록, 결과 유형 및 해당 W3C 권고안의 출처를 포함합니다.
- 불리언()
- 천장()
- choose()
- 콘캣()
- 포함()
- 카운트()
- current() XSLT 특화
- document() XSLT 특화
- element-available()
- false()
- 층()
- format-number() XSLT 특화
- 함수-가용성()
- generate-id() XSLT 특화
- id()
- key() XSLT 특화
- lang()
- 마지막()
- local-name()
- 이름()
- Namespace-uri()
- 정규화 공간()
- not()
- 번호()
- position()
- 라운드()
- starts-with()
- string()
- 문자열 길이()
- 서브스트링()
- 서브스트링 후()
- 서브스트링 비포()
- sum()
- system-property() XSLT 특화
- translate()
- true()
- unparsed-entity-url() XSLT 특화
실기 시험
크롬을 열고 다음 명령어로 모든 A 탭 링크의 텍스트 내용을 확인하세요:
아래에 나와 있습니다:
참조:하이퍼링크 로그인이 보입니다. |