2009-08-05 26 views
11

Tôi có một yếu tố html như:Find tag với id bao gồm [] với Nokogiri

<div id="spam[500]"> 

Tôi muốn tìm kiếm cho các phần tử này bằng id, nhưng có vẻ như nokogiri đó là nhận nhầm lẫn bởi các []. Tôi đang cố gắng:

doc.css("#spam[#{eggs.id}]") 

nhưng vô ích.

Trả lời

14

Chris, hãy thử này và cho tôi biết nếu nó hoạt động:

doc = Nokogiri::HTML(page) 
el = doc.xpath("//div[@id='spam[500]']").first 

Vấn đề là bạn không thể truy cập nó thông qua CSS (ngay cả trong trình duyệt). Thử đặt một số thuộc tính CSS cho "spam [500]" và chúng sẽ không được áp dụng. Bạn có thể truy cập thông qua xpath tuy nhiên, như được hiển thị ở trên.

+0

Nó hoạt động. Cảm ơn. –

1

Vấn đề thực sự ở đây là các nhân vật [và] là bất hợp pháp trong một thuộc tính id HTML4 (hoặc XML) - nhìn vào những điều sau đây:

http://www.w3.org/TR/html401/types.html#type-name

(cho định nghĩa bản quy phạm của thuộc tính id nhìn vào www.w3.org//TR/html401/struct/global.html#adef-id)

1

bạn cũng có thể làm theo cách

el = doc.xpath("id(spam[500])").first 

này cho các yếu tố ha ving id của bạn có thể gọi chúng trực tiếp thông qua id vì nó luôn luôn duy nhất.

để tìm ra xpath, vui lòng thêm plugin 'xpath checker' vào firefox. Nó giúp rất nhiều và rất dễ dàng

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