2010-04-23 24 views
9

Giả sử tôi có một tài liệu html đầy đủ là đầu vào XML.
Tệp XSLT trông như thế nào nếu tôi chỉ muốn xuất hình ảnh đầu tiên (hoặc bất kỳ) nào từ html?XSLT Nhận được sự xuất hiện đầu tiên của một thẻ cụ thể

+0

có bạn nhận được gì cho đến nay? Điều gì không hoạt động? – Oded

+0

Câu hỏi hay (+1). Xem câu trả lời của tôi cho giải pháp chính xác duy nhất cho đến nay. :) –

Trả lời

17

biểu Một XPath chọn phần tử đầu tiên <img> trong một tài liệu là:

(//img)[1]

Do lưu ý rằngmột sai lầm thường xuyên - như do @Oded trong câu trả lời của ông là để đề xuất biểu thức XPath sau - nói chung nó có thể chọn nhiều hơn một phần tử:

//img[1] (: WRONG !!! :)

Tùy chọn này chọn tất cả các phần tử <img> trong tài liệu, mỗi phần tử trong số đó là số <img> đầu tiên của cha mẹ.

Dưới đây là lời giải thích chính xác của sai lầm thường xuyên này - trong W3C XPath 1.0 Recommendation:

LƯU Ý: Vị trí con đường //para[1] không có nghĩa là giống như con đường vị trí /descendant::para[1]. Sau đó chọn phần tử con đầu tiên para; trước đây chọn tất cả các phần tử con là para là các phần tử con đầu tiên của bố mẹ chúng.

Sự cố thêm tồn tại nếu tài liệu đã xác định không gian tên mặc định, trường hợp này phải đúng với XHTML. XPath xử lý bất kỳ tên không cố định nào thuộc về không có không gian tên và biểu thức (//img)[1] không chọn nút nào vì không có phần tử nào trong tài liệu thuộc về không có không gian tên và có tên img.

Trong trường hợp này có hai cách để xác định biểu thức truy nã XPath:

  1. (//x:img)[1] - nơi tiền tố x có liên quan (bằng ngôn ngữ lưu trữ) với namespcae mặc định cụ thể (trong trường hợp này này là không gian tên XHTML ).

  2. (//*[name()='img'])[1]

+0

Ví dụ 'sai' của bạn có thiếu '[1]' không? – AakashM

+0

@AakashM: Cảm ơn, đã sửa. –

+1

Giải thích tuyệt vời, giải pháp tuyệt vời. – Lobo

2

Biểu thức XPath sẽ hiển thị hình ảnh đầu tiên từ trang HTML: (//img)[1].

Xem câu trả lời từ @Dimitre Novatchev để biết thêm thông tin về sự cố xảy ra với sự cố.

+0

Xem câu trả lời của tôi để được giải thích về vấn đề với câu trả lời của bạn. Đọc thông số XPath - định nghĩa của từ viết tắt '//', và tìm kiếm lỗi thường xuyên này.Nếu vấn đề vẫn chưa rõ ràng, hãy hỏi một câu hỏi riêng và nhiều người sẽ vui mừng giải thích. :) –

+0

** Câu trả lời này là W R O N G ** !!!!! Xem câu trả lời của tôi để được giải thích. –

+0

Tôi chắc chắn không muốn đọc thông số XPath. Nhưng tôi thấy Dimitre đang nói gì. '// img [1]' sẽ chọn thẻ img đầu tiên của * any * parent thay vì thẻ đầu tiên của tài liệu. –

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