2012-03-29 4 views
0

내가 다음 XML snipit이 말 이전의 범위에서 지난 3 개 항목을 찾을 수 있습니다 : XPath는

<ul> 
    <li>alice</li> 
    <li>bob</li> 
    <li>carla</li> 
    <li>dave</li> 
    <li>eric</li> 
    <li>fanny</li> 
</ul> 
<team>Team 1</team> 

내가 지난 3 개 회원 (데이브, 에릭, 성기에게)합니다.

//team/preceding::li으로 모든 팀원을 확보 할 수 있습니다.

나는 XML에 대한 범위

//team/preceding::li[last()-3 to last()] 또는 위치 //team/preceding::li[position() > last()-3]

+0

나는 XPath를 수정하는 자유를 취했다 ('선행은 3 개소에서 진행했다 '). –

답변

2

preceding::을 해결하는 컨텍스트에있는 동안 주문은 반대로 진행되며 나중에 문서 주문으로 돌아갑니다.

xml sel -t -c '//team/preceding::li[position() <= 3]' foo.xml 
<li>dave</li><li>eric</li><li>fanny</li> 
1

으로 지난 3 명 멤버를 잡아 실패 오전은

<ul> 
    <li>alice</li> 
    <li>bob</li> 
    <li>carla</li> 
    <li>dave</li> 
    <li>eric</li> 
    <li>fanny</li> 
</ul> 

사용

//li[position() > last() - 3] 

정확히 3 마지막 노드를 선택합니다 .

+0

목록이 하나 뿐인 경우에만 작동합니다. 나는 많은 것을 가지고있다. – zhon

+0

@ zhon, 당신은 당신의 요구를 재현하는 실제 샘플을 제공 할 수 있습니까? –

+0

Thx @kirill, chris 님이 // team/preceding :: li [position() <= 3] – zhon