Xpath 정리

2016.12.31 08:32

졸리운_곰 조회 수:32

Xpath 정리

What is XPath?

 

XPath는 XML문서의 일부분을 정의(선택) 하는 문법이다.  XPath 구문들은 전통적인 컴퓨터 파일시스템의 구조와 유사하며 구문과 100개의 내장 함수를 이용하여 XML문서를 탐색하는데 사용된다.  XSLT의 주요 구성요소이며 XPointer, XML 구문분석 소프트웨어 에서 사용되도록 디자인 되었다. W3C 권고안 이다.

 

 

 

 

용어정리

 

태그(tag) : 

   < 로 시작해서 > 로 끝나는 형식정의이며 시작태그, 종료태그, 빈태그가 있다.


엘리먼트(Element) :

   시작태그와 종료태그 그리고 태그 사이의 모든내용을 말하며 태그, 자식에러먼트, 속성, 텍스트(컨텐츠)가 있다.


노드(node) :

   XML문서는 여러개의 가지(Nodes)로 구성된 나무(Tree)로 비유된다.  말 그래도 Nodes 나무를 구성하는 줄기, 가지, 잎, 꽃 이런 것이다. XPath 에서 Node는 element, attribute, text, namespace, processing-instruction, comment, document 의 7가지 노드가 존재한다. 노드 사이의 관계를 나타내는 용어로 부모노드(Parent), 자식노드 (Children), 형재노드(Siblings), 조상노드(Ancestors),  자손노드(Descendants)를 사용한다.

 

 

 

 

XPath Syntax

 

<?xml version="1.0" encoding="utf-8"?>

<!-- XPath 문법을 설명할 예제 파일 입니다. -->
<bookstore>
    <book>
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>

    <book>
        <title lang="eng">Learning XML</title>
        <price>39.95</price>
    </book>
</bookstore>

 

 

루트엘리먼트 노드 :      <bookstore> ..  </bookstore>
엘리먼트 노드 :          <author>J K. Rowling</author>

속성 노드 :                 lang="en"

Atomic values :  자식노드나 부모노드가 없는 노드  ( J K. Rowling   과  "en"  )

 

 

구문과 기호
nodename  : 지정한 노드이름을 가진 모든 노드를 선택
/         : 루트노드를 기준위치로 하는 위치 지시자
//        : XML문서내에서 모든 위치를 기준위치로 하는 위치 지시자
.         : 현재노드를 기준위치로 정하는 위치 지시자
..        : 부모노드를 기준위치로 사용하는  위치 지시자
@        : 속성을 선택하기 위해 사용되는 지시자
nodename[표현식]  :  조건에 해당하는 노드들을 선택 하는데 사용
*       : 모든 엘러먼트노드를 의미하는 XPath의 와일드 카드
@*      : 모든 속성노드를 의미하는 XPath의 와일드 카드
node()  : 모등종류의 노드를 의미한  XPath의 와일드 카드
|       : 노드의 합집합 연산자

 

 

 

구문예제와 설명 (위의 xml 파일 기준)

bookstore  

      bookstore 엘리먼트(모든 자식노드 포함)를 선택한다. 

/bookstore  

      루트경로의 하위엘리먼트 bookstore를 선택한다. (절대경로)
bookstore/book  

       bookstore 엘러먼트의 자식에러먼트 중 book  엘리먼트를 모두 선택

//book   

       xml 문서내의 모든 book 엘리먼트늘 선택
bookstore//book 

       bookstore element의 자손인 모든 book 엘리먼트를 선택

//@lang

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

      xml 문서 내에서 이름이 lang 인 모든 속성을 선택함

/bookstore/book[1] 

      bookstore 엘리먼트의 자식엘리먼트 중 첫번째 book  엘리먼트를 선택

/bookstore/book[last()]

      bookstore 엘리먼트의 자식엘리먼트 중 마지막 book  엘리먼트를 선택

/bookstore/book[last()-1]

      bookstore 엘리먼트의 자식엘리먼트 중 마지막에서 첫번째 book  엘리먼트를 선택
/bookstore/book[position()<3]

       bookstore 엘리먼트의 자식엘리먼트 중 처음부터 2개의 book  엘리먼트를 선택
//title[@lang]

      문서 내의 모든 title 엘리먼트 중 이름이 lang인  속성을 포함한 것 들을 선택

//title[@lang='eng']

      문서 내의 모든 title 엘리먼트 중 이름이 lang이고 값이 'eng'인  속성을 포함한 것 들을 선택

/bookstore/book[price>35.00]

      bookstore 엘리먼트의 자식엘리먼트인 book 엘리먼트 중에서 자식 엘리먼트 price의 값이 35보단 큰 것들을 선택
/bookstore/book[price>35.00]/title

      자식엘리먼트 price가 35보다 큰 book 엘리먼트의 자식엘리먼트인 title 엘리먼트를 모두 선택

/bookstore/*

      bookstore엘리먼트의 모든 자식노드를 선택
//*

      문서의 모든 엘리먼트를 선택
//title[@*]

      xml 문서내에서 속성이 없는 모든 title 엘리먼트를 선택

//book/title | //book/price

      문서내에서 book 엘리먼트의 자식인 title 노드와 price 논드를 선택
/bookstore/book/title | //price

       bookstore의 손자이며 book의 자식인 title 엘리먼트와 문서내의 모든 price 엘리먼트를 선택

 

 

child::book

       현재 노드의 자식노드 중에서 모든 book 노드를 선택
attribute::lang

        현재 노드의 모든  lang 속성노드를 선택

child::*

        현재 노드의 모든 자식노드를 선택
attribute::*

       현재노드의 모든 속성노드를 선택

child::text()

       현재노드의 모든 자식노드 중 text  노드를 선택

child::node()

       현재노드의 모든 자식 노드를 선택 
descendant::book

      현재 노드의 자손노드 중 book 노드를 모두 선택

ancestor::book

      현재 노드의 조상노드 중 book 노드를 모두 선택
ancestor-or-self::book

    현재노드의 조상 노드중에서 book 노드를 선택하고 현재노드가 book 노드이면 포함

child::*/child::price

       현재노드의 손자 노드중 모든 price 노드를 선택

 

 

 

[출처] http://fortune94.tistory.com/179

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
1195 [ 一日30分 인생승리의 학습법] VBA Web Scraping: How Can VBA Be Used To Scrape Website Data? file 졸리운_곰 2024.04.13 3
1194 [ 一日30分 인생승리의 학습법] 윈도우 실행파일 구조(PE파일) file 졸리운_곰 2024.03.31 3
1193 [ 一日30分 인생승리의 학습법] [Analysis] PE(Portable Executable) 파일 포맷 공부 file 졸리운_곰 2024.03.31 3
1192 [ 一日30分 인생승리의 학습법] 성공하는 메타버스의 3가지 조건 file 졸리운_곰 2024.03.30 7
1191 [ 一日30分 인생승리의 학습법] REST, REST API, RESTful 과 HATEOAS file 졸리운_곰 2024.03.10 9
1190 [ 一日30分 인생승리의 학습법] 렌더링 삼형제 CSR, SSR, SSG 이해하기 file 졸리운_곰 2024.03.10 2
1189 [ 一日30分 인생승리의 학습법] 엑셀 VBA에서 셀레니움 사용을 위한 Selenium Basic 설치 file 졸리운_곰 2024.02.23 11
1188 [ 一日30分 인생승리의 학습법]500 Lines or Less Blockcode: A Visual Programming Toolkit : 500줄 이하의 블록코드: 시각적 프로그래밍 툴킷 졸리운_곰 2024.02.12 4
1187 [ 一日30分 인생승리의 학습법] 구글 클라이언트(앱) 아이디를 발급받으려면 어떻게 해야 하나요? 졸리운_곰 2024.01.28 3
1186 [ 一日30分 인생승리의 학습법] 빅뱅 프로젝트를 성공적으로 오픈하기 위한 팁 졸리운_곰 2023.12.27 16
1185 [ 一日30分 인생승리의 학습법]“빅뱅 전환보다 단계적 전환 방식이 이상적 애자일팀과 협업 쉽게 체질 개선을” file 졸리운_곰 2023.12.27 12
1184 [ 一日30分 인생승리의 학습법] Big-bang / phased 접근 file 졸리운_곰 2023.12.27 3
1183 [ 一日30分 인생승리의 학습법] CodeDragon 메뉴 데이터 전환의 개념 이해 - 데이터 전환의 개념, 데이터 전환방식, 데이터 전환방식 및 장단점 비교, 데이터전환 이후 검토해야 할 사항 졸리운_곰 2023.12.27 5
1182 [ 一日30分 인생승리의 학습법] 블록체인과 IPFS를 이용한 안전한 데이터 공유 플랫폼 - 분쟁 해결 시스템 file 졸리운_곰 2023.12.27 6
1181 [ 一日30分 인생승리의 학습법] 블록체인과 IPFS를 이용한 안전한 데이터 공유 플랫폼 - 개념과 리뷰 시스템 file 졸리운_곰 2023.12.27 4
1180 [ 一日30分 인생승리의 학습법] 소켓 CLOSE_WAIT 발생 현상 및 처리 방안 file 졸리운_곰 2023.12.03 7
1179 [ 一日30分 인생승리의 학습법] robots 설정하기 졸리운_곰 2023.12.03 3
1178 [ 一日30分 인생승리의 학습법] A Tutorial and Elementary Trajectory Model for the Differential Steering System of Robot Wheel Actuators : 로봇 휠 액츄에이터의 차동 조향 시스템에 대한 튜토리얼 및 기본 궤적 모델 file 졸리운_곰 2023.11.29 6
1177 [ 一日30分 인생승리의 학습법] Streamline Your MLOps Journey with CodeProject.AI Server : CodeProject.AI 서버로 MLOps 여정을 간소화하세요 file 졸리운_곰 2023.11.25 2
1176 [ 一日30分 인생승리의 학습법] Comparing Self-Hosted AI Servers: A Guide for Developers / : 자체 호스팅 AI 서버 비교: 개발자를 위한 가이드 file 졸리운_곰 2023.11.25 10
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED