2010-04-14 29 views
35

Làm cách nào để bỏ qua phần tử đầu tiên và nhận phần còn lại của các phần tử?Làm thế nào để bỏ qua phần tử đầu tiên trong xpath

<ul> 
    <li><a href="#">some link</a></li> 
    <li><a href="#">some link 2</a></li> 
    <li><a href="#">link i want to find</a></li> 
</ul> 

Cảm ơn

+1

Bạn có thể xác định "phần tử đầu tiên" là gì không? Từ ví dụ XML phần tử đầu tiên là 'ul', hoặc nếu bạn có ý nghĩa từ' ul' phần tử đầu tiên là 'li', hay bạn muốn chọn tất cả các phần tử' a' sau đó bỏ qua phần tử đầu tiên? –

+0

Tôi muốn bỏ qua li đầu tiên. – priyank

Trả lời

70

nếu bạn muốn bỏ qua các yếu tố "đầu tiên" chỉ sau đó:

//li[position()>1] 
or 
(//a)[position()>1] 

nếu bạn muốn người cuối cùng chỉ (giống như ví dụ của bạn dường như gợi ý):

//li[last()] 
or 
(//a)[last()] 
+3

Hãy nhớ rằng các chỉ mục trong XPath là dựa trên 1, không dựa trên 0. Vì vậy, biểu thức 'a [position()> 1]' trả về tất cả các phần tử 'a' trừ phần tử đầu tiên. –

+0

position() trả về vị trí của phần tử context. Trong XPATH được cung cấp, vị trí của mỗi 'a' sẽ bằng 1 AND last() và trả về mỗi phần tử' a', không bỏ qua phần tử đầu tiên. –

+1

Để có được 'position()' để đánh giá như mong đợi, bạn cần bọc các phần tử trong các dấu ngoặc đơn để nhóm chúng trong một tập hợp nút và * sau đó * áp dụng bộ lọc biến vị ngữ trên vị trí (tức là ('// a) [position()> 1] 'và' (// a) [last()] ') –

10

Bạn có thể sử dụng position() để bỏ qua phần "đầu tiên", nhưng tùy thuộc vào yếu tố nào yo u quan tâm và ngữ cảnh là gì, bạn có thể cần một biến thể nhỏ trên XPATH của bạn.

Ví dụ, nếu bạn muốn giải quyết tất cả các li yếu tố và nhận được tất cả ngoại trừ lần đầu tiên, bạn có thể sử dụng:

//li[position()>1] 

và nó sẽ làm việc như mong đợi, trở về tất cả các li yếu tố ngoại trừ đầu tiên.

Tuy nhiên, nếu bạn muốn giải quyết tất cả các thành phần a bạn cần sửa đổi XPATH một chút. Trong ngữ cảnh của biểu thức //a[position()>1], mỗi một trong các thành phần a sẽ có một số position() của 1 và last() sẽ được đánh giá là đúng. Vì vậy, nó sẽ luôn trả về mỗi a và sẽ không bỏ qua lần đầu tiên.

Bạn cần phải quấn biểu thức chọn a trong ngoặc đơn để nhóm chúng trong tập hợp nút, sau đó áp dụng bộ lọc biến vị ngữ trên vị trí.

(//a)[position()>1]

Ngoài ra, bạn cũng có thể sử dụng một biểu thức như thế này:

//a[preceding::a] 

Điều đó sẽ tìm thấy tất cả a yếu tố ngoại trừ thứ nhất (vì không có a trước cái đầu tiên).

Các vấn đề liên quan