YongWook's Notes

<xpath> 개념정리와 기본문법 본문

-software

<xpath> 개념정리와 기본문법

글로벌한량 2016. 4. 13. 21:53

xpath란?


XPath uses path expressions to select nodes or node-sets in an XML document. These path expressions look very much like the expressions you see when you work with a traditional computer file system.

Xpath는 웹에 기록된 정보들에 접근하는 방식을 다룬 문법이다. 컴퓨터에서 디렉토리에 접근할 때 사용하는 방식을 그대로 웹에 적용했다. 

\C:\myDocument\myFile에 접근하려면 순차적으로 C: -> myDocument -> myFile에 도달한다. 이와 비슷한 방식으로 아래의 html 코드를 보자.  

	<ul>
		<li>
			<p>pretty girl</p>
		</li>
		<li>
			<p>beautiful girl</p>
		</li>
	</ul>

pretty girl이라는 data에 닿으려면 body -> ul -> li-> p  순서로 태그에 접근해야한다.

윈도우에서 디렉토리는 중복을 허용하지 않지만 웹에서는 어쩔 수 없이 같은 태그들은 여러개 사용해야 한다. 그리고 그 태그들은 각각의 속성들도 가지고 있다. 이렇게 따로 고려할것들을 정리하여 문법으로 만든것이 xpath라고 생각하면 되겠다.


xpath기본


xpath는 다루고 싶은 모든  element들을 node라는 단위로 처리한다. 

	<span style="font-size=10pt;" class="top"> man-about-town </span>

위의 코드는 span, style, class, man-about-town 총 4개의 node로 구성된 것이라 할 수 있다. 이렇게 node화를 하다보면 비슷한 특성의 node들이 나오게 되는데 그들은 다음과 같다.


 node

 특성

element node

태그 

attribute node

속성 

text node

태그의 내용 

namespace node

각 tag의 identity를 위해 붙이는 xmlns:prefix="URI" 형식의 attribute

processing-instruction node

어떤 instruction을 수행함 

comment node

주석처리된 것 

document node

xml 문서 그 자체를 가리키는 node

이 태그들 중 가장 자주 사용되는 node들은 element와 attribute, text node이다.


앞서 언급한 2가지 문제. 중복 태그에 대한 접근과 특정 node에 대한 접근방법만 간단히 정리해보자.


먼저 중복된 태그를 관리하기 위해서 xpath는 배열의 개념을 사용한다. 위의 예에서 

첫번째 <li>태그의 'pretty girl'은 '/body/ul/li[1]' 

두번째 <li>태그의 'beautiful girl'은 '/body/ul/li[2]' 으로 지정하는 것이다.


이때,  '/body/ul/li[num>2]' 를 사용하면 li태그 밑에 있는 num의 값이 2보다 큰 모든 li를 반환하게 된다. 기본적으로 nodename을 이용한다는 것은 모든 해당 nodename을 호출한다는 것으로 취급한다. 이때는 명확하게 표현하기 위해서 위의 예를 다시한번 사용하면 '/body/ul//li' 로 표기하여 두개의 <li>태그, 즉 pretty girl가 들어있는 tag와 beautiful girl이 들어있는 태그를 모두 호출할 수 있다. 이 과정들은 element node를 찾아가는 과정이다. element node는 가장 많이 쓰이는 node이기 때문에 별도의 표기 없이 사용이 가능하다.


그 다음으로 많이 쓰이는 atrribute node의 경우에는 이 앞에 @를 써 줘야 한다. 

예를 들어서 

//span[@style]

을 사용하게되면 style속성을 가지고 있는 span태그의 element node를 모두 가져오게 된다.


마지막으로 text node, 즉 그 태그의 내용에 접근하는 방법은 text()를 사용하는것이다.

//li/text()

위의 방식으로 모든 <li>태그 안에 있는 text내용을 추출할 수 있다.



+우리가 주로 들어가는 웹사이트의 xpath를 chrome을 이용하면 쉽게 알 수 있다.


위와 같이 알고싶은 object를 오른쪽 클릭한 후 검사를 클릭한다



오른쪽에 나타나는 개발자 도구의 해당 element를 한번더 오른쪽 클릭하고 copy -> xpath를 클릭하면 클립보드에 해당 element의 xpath가 저장된다.



이상으로 xpath에 대한 간략한 포스팅을 마친다.


<참조>

http://www.w3schools.com/xsl/xpath_syntax.asp


Comments