출처 마소 XPath 예제 : https://msdn.microsoft.com/ko-kr/library/ms256086(v=vs.120).aspx
Python으로 selenium을 이용한 웹 크롤링을 하려니 xpath는 자유자재로 써야 할 거 같다.
이참에 다시한번 정리.
식 | 참조 항목 |
---|---|
./author | |
author | 현재 컨텍스트 내에 있는 모든 <author> 요소 |
first. name | 현재 컨텍스트 내에 있는 모든 <first.name> 요소 |
/bookstore | 이 문서의 문서 요소(<bookstore>) |
//author | 문서에 있는 모든 <author> 요소 |
book[/bookstore/@specialty=@style] | style 특성 값이 문서의 루트에 있는 <bookstore> 요소의 specialty 특성 값과 같은 모든 <book> 요소 |
author/first-name | <author> 요소의 자식인 모든 <first-name> 요소 |
bookstore//title | |
bookstore/*/title | <bookstore> 요소의 최하위인 모든 <title> 요소 |
bookstore//book/excerpt//emph | <bookstore> 요소 내에 있는 <book> 요소의 <excerpt> 자식 내에 있는 모든 <emph> 요소 |
.//title | |
author/* | <author> 요소의 모든 자식 요소 |
book/*/last-name | <book> 요소의 최하위인 모든 <last-name> 요소 |
*/* | 현재 컨텍스트의 모든 최하위 요소 |
*[@specialty] | specialty 특성이 있는 모든 요소 |
@style | 현재 컨텍스트의 style 특성 |
price/@exchange | 현재 컨텍스트 내에 있는 <price> 요소의 exchange 특성 |
price/@exchange/total | |
book[@style] | 현재 컨텍스트의 style 특성이 있는 모든 <book> 요소 |
book/@style | 현재 컨텍스트의 모든 <book> 요소에 대한 style 특성 |
@* | 현재 요소 컨텍스트의 모든 특성 |
./first-name | |
first-name | 현재 컨텍스트 노드에 있는 모든 <first-name> 요소 |
author[1] | 현재 컨텍스트 노드에서 첫 번째 <author> 요소 |
author[first-name][3] | <first-name> 자식 요소가 있는 세 번째 <author> 요소 |
my:book | my 네임스페이스의 <book> 요소 |
my:* | my 네임스페이스의 모든 요소 |
@my:* | my 네임스페이스의 모든 특성. 여기에는 my 네임스페이스의 요소에서 비정규화된 특성이 포함되지 않습니다. |
인덱스는 부모에 상대적.
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
식 | 참조 항목 |
---|---|
x/y[1] | 각 <x>의 첫 번째 <y> 자식 이 식은 다음 행에 나온 식과 같습니다. |
x/y[position() = 1] | 각 <x>의 첫 번째 <y> 자식 |
(x/y)[1] | |
x[1]/y[2] | 첫 번째 <x>의 두 번째 <y> 자식 |
나머지 예제에 대한 샘플 XML 파일
식 | 참조 항목 |
---|---|
book[last()] | 현재 컨텍스트 노드의 마지막 <book> 요소 |
book/author[last()] | 현재 컨텍스트 노드에서 각 <book> 요소의 마지막 <author> 자식 |
(book/author)[last()] | 현재 컨텍스트 노드에서 <book> 요소의 전체 <author> 자식 집합에서 마지막 <author> 요소 |
book[excerpt] | <excerpt> 요소 자식이 하나 이상 포함된 모든 <book> 요소 |
book[excerpt]/title | <excerpt> 요소 자식이 하나 이상 포함된 <book> 요소의 자식인 모든 <title> 요소 |
book[excerpt]/author[degree] | <degree> 요소 자식이 하나 이상 포함되어 있고, <excerpt> 요소가 하나 이상 포함된 <book> 요소의 자식인 모든 <author> 요소 |
book[author/degree] | <degree> 자식이 하나 이상 포함된 <author> 자식을 포함하는 모든 <book> 요소 |
author[degree][award] | <degree> 요소 자식과 <award> 요소 자식이 하나 이상 포함된 모든 <author> 요소 |
author[degree and award] | <degree> 요소 자식과 <award> 요소 자식이 하나 이상 포함된 모든 <author> 요소 |
author[(degree or award) and publication] | <degree> 또는 <award> 요소 하나 이상과 <publication> 요소가 자식으로 하나 이상 포함된 모든<author> 요소 |
author[degree and not(publication)] | <degree> 요소 자식이 하나 이상 포함되어 있고 <publication> 요소 자식이 포함되지 않은 모든 <author> 요소 |
author[not(degree or award) and publication] | <publication> 요소 자식이 하나 이상 포함되어 있고 <degree> 및 <award> 요소 자식이 포함되지 않은 모든 <author> 요소 |
author[last-name = "Bob"] | 값이 Bob인 <last-name> 요소 자식이 하나 이상 포함된 모든 <author> 요소 |
author[last-name[1] = "Bob"] | 첫 번째 <last-name> 자식 요소의 값이 Bob인 모든 <author> 요소 이 식은 다음 행에 나온 식과 같습니다. |
author[last-name [position()=1]= "Bob"] | 첫 번째 <last-name> 자식 요소의 값이 Bob인 모든 <author> 요소 |
degree[@from != "Harvard"] | from 특성이 "Harvard"가 아닌 모든 <degree> 요소 |
author[. = "Matthew Bob"] | 값이 Matthew Bob인 모든 <author> 요소 |
author[last-name = "Bob" and ../price > 50] | 값이 Bob인 <last-name> 자식 요소와 값이 50보다 큰 <price> 형제 요소가 포함된 모든 <author> 요소 |
book[position() <= 3] | 처음 세 책(1, 2, 3)입니다. |
author[not(last-name = "Bob")] | 값이 Bob인 <last-name> 자식 요소가 포함되지 않은 모든 <author> 요소 |
author[first-name = "Bob"] | 값이 Bob인 <first-name> 자식이 하나 이상 포함된 모든 <author> 요소 |
author[* = "Bob"] | 값이 Bob인 자식 요소가 포함된 모든 author 요소 |
author[last-name = "Bob" and first-name = "Joe"] | 값이 Bob인 <last-name> 자식 요소와 값이 Joe인 <first-name> 자식 요소가 포함된 모든 <author> 요소 |
price[@intl = "Canada"] | 컨텍스트 노드에서 intl 특성이 "Canada"인 모든 <price> 요소 |
degree[position() < 3] | 컨텍스트 노드의 자식인 처음 두 <degree> 요소 |
p/text()[2] | 컨텍스트 노드의 각 <p> 요소에서 두 번째 텍스트 노드 |
ancestor::book[1] | 컨텍스트 노드의 가장 가까운 <book> 상위 요소 |
ancestor::book[author][1] | 컨텍스트 노드의 가장 가까운 <book> 상위 요소이며 이 <book> 요소에는 <author> 요소가 자식으로 포함되어 있습니다. |
ancestor::author[parent::book][1] | 현재 컨텍스트의 가장 가까운 <author> 상위 요소이며 이 <author> 요소는 <book> 요소의 자식입니다. |