2009-03-18 25 views
17

Tôi có một số truy vấn XML và XPath. Tôi đang sử dụng Yahoo! các tiện ích, vì vậy tôi đang sử dụng XPath 1.0.Cách chọn mục thứ n trong xpath 1.0?

Dưới đây là các ý chính của XML của tôi ...

<root> 
    <cat num="SOURCE"> 
     <movie> 
      <swf>speak.swf</swf> 
      <width>250</width> 
      <height>150</height> 
      <colour>cccccc</colour> 
     </movie> 
     <movie> 
      <swf>inertia.swf</swf> 
      <width>380</width> 
      <height>130</height> 
      <colour>9a9a9a</colour> 
     </movie> 
     <movie> 
      <swf>swing.swf</swf> 
      <width>380</width> 
      <height>130</height> 
      <colour>9A9A9A</colour> 
     </movie> 
     .... 

Bây giờ ... nếu tôi chạy truy vấn này:

"root/cat/movie/swf" 

tôi nhận được 42 kết quả, hạch tất cả 'swf' đó là chính xác .

Nếu Tuy nhiên, tôi chỉ muốn một thứ 6, tôi muốn để có thể làm:

"root/cat/movie/swf[6]" 

Nhưng tôi nhận được một danh sách có chứa 0 nút.

Lạ lùng, sử dụng [1] (Và không có giá trị nào khác) đưa ra danh sách tất cả 42 nút của tôi.

Rõ ràng là tôi đang thiếu thứ gì đó khá cơ bản ở đây. Có ai thấy nó là gì không?

Trả lời

34

Tôi tự hỏi nếu bạn muốn tìm:

"root/cat/movie[6]/swf" 

(nhận được swf của bộ phim thứ 6)

hoặc cách khác:

"(root/cat/movie/swf)[6]" 

(tìm tất cả các thành phần của film/swf, và chọn số 6)

Khi mỗi bộ phim có chính xác một hình, cả hai đều giống nhau; nếu một bộ phim có không hoặc nhiều yếu tố swf, họ hai truy vấn là một cách tinh tế khác nhau ...

+0

Tôi có nghĩa là sau này. Cảm ơn. – izb

+7

Điều quan trọng cần lưu ý là các chỉ số dựa trên 1. – AndiDog

9
"root/cat/movie/swf[6]" 

đề cập đến mỗi <swf> nút thứ 6 trong "root/cat/movie" ngữ cảnh.

Bạn chỉ có một nút <swf> mỗi nút.

gì bạn có nghĩa là:

"root/cat/movie[6]/swf" 
+0

đánh bại tôi với nó :) 1 cho lời giải thích – annakata

+0

Ah, tất nhiên :) ký tự mảng giống như mảng ... – izb

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