2011-02-10 4 views
6

나는 media-gallery-item 클래스를 가진 div 요소의 컬렉션을 가지고 있습니다.
요소 번호 x를 선택하고 싶습니다. 다만 모든 항목을 선택하면위치가 XPATH 조건 자와 결합

, 나는 5 개 결과

$x("//div[@id='content-area']//div[@class='media-gallery-item']") 

가 지금은 항목 번호 2를 선택할 수 할 수 ,하지만 난 제대로 두 가지를 결합하는 방법을 알아낼 수 없습니다 :

$x("//div[@id='content-area']//div[@class='media-gallery-item'][2]") 

$x("//div[@id='content-area']//div[@class='media-gallery-item' 
            and position() = 2]") 

나는 이것들이 실제로는 AND이 아니기 때문에 많은 의미를 가지지 않는다는 것을 알고있다. 그러나 더 좋아한다 : "먼저 이것에 따라 필터를 걸고, 두 번째 일치를 선택한다". 괄호 : 이의 목표는 일을 선택에 대한 유지하는 것입니다

+0

그냥 처음 중복이 발견 사용해보십시오 [내가 XPath에와 마지막 N 요소를 선택하려면 어떻게합니까?] (http://stackoverflow.com/questions/458596/how-do-i-select-the- last-n-elements-with-xpath) –

+0

이것은 중복이 아닙니다. 나는 특정 위치를 원하고 다른 술어와 결합시킨다. 다른 게시물은 마지막 n 개의 항목을 원합니다 (정확한 위치가 아닌 다른 술어가 없음) –

답변

10

단계별 답을 작동합니다.

(//div[@id='content-area']//div)[2] 
하십시오 div[@id='content-area'] 조상 사용하여

//div[@id='content-area']//div[2] 

두번째 선택 (문서 순) div 소자 :

는 각 부모의 제 차일 사용되는 div[@id='content-area'] 조상을 가진 요소를 선택

차이점을 확인하십시오. 그런 다음

, 그들은 클래스 '미디어 갤러리 항목'사용이 제공하는 각각의 부모의 두 번째 차일있는 요소를 선택합니다 :

//div[@id='content-area']//div[2][@class='media-gallery-item'] 

가에서 두 번째있는 요소를 선택하려면를 클래스 media-gallery-item이 (각각의 부모) 그 차일 :

//div[@id='content-area']//div[@class='media-gallery-item'][2] 

은 (문서 순서대로) 두 번째 선택하려면 div[@id='content-area'] 조상과 div 요소를, 그것은를 가지고 제공개 클래스 : @Alejandro에 의해 제안

(//div[@id='content-area']//div)[@class='media-gallery-item'][2] 

사양이을 인용 :

(//div[@id='content-area']//div)[2][@class='media-gallery-item'] 

div[@id='content-area'] 조상 모든 div 요소와 media-gallery-item 클래스에서 (문서 순서대로) 두 번째 선택하려면

술어는 축에 대해 인 노드 집합을 필터링하여 새 노드를 만듭니다. 노드 집합.여과 될 노드 세트의 각 노드에 대해 상기 PredicateExpr는 노드의 번호, 문맥 노드로서 해당 노드 평가 된 노드 세트 컨텍스트 크기로하고, 인접 위치에 노드에서의 노드 세트 컨텍스트 위치로 축에 대하여 을

http://w3.org/TR/xpath/#predicates

의 부재에 근접하여 위치 0 노드 집합 축에 대하여 축이 정방향 축 이고 축인 경우 역방향 문서 순서 주문할 경우 문서 순서 정렬 노드 집합에있는 노드 의 위치로 정의 인

http://w3.org/TR/xpath/#dt-proximity-position

결론 축 반대 위치 술어가 축에 대하여 작동한다. 그리고 명시 적으로 우선 순위를 선언하려면 괄호가 필요합니다. 따라서 child 축이 아니라 위치 계산시 descendant-or-self 축을 확인한 후 노드 집합이 고려됩니다.

+0

좋은 답변, +1 –

+1

@Alejandro, 친숙한 따옴표 :) 이제 답변에 추가하겠습니다. – Flack

+0

이제 완전한 대답입니다! –

0

이 밝혀졌습니다 (두 번째 요소, 예를 들어, 나에게 a 요소의 href 속성을 얻을)!

(//div[@id='content-area']//div[@class='media-gallery-item'])[2] 

+0

완전한 분석을 위해 내 대답을 확인할 수도 있습니다. – Flack

0

잘못된 방식으로 액세스하는 것으로 보입니다.

/div[@id='content-area' and @class='media-gallery-item'][2]