2011-01-18 31 views
28

Tôi nhận thấy có điều gì đó kỳ lạ khi sử dụng Nokogiri gần đây. Tất cả HTML tôi đã phân tích cú pháp đã được cung cấp các thẻ bắt đầu và kết thúc <html><body>.Làm thế nào để ngăn chặn Nokogiri thêm <DOCTYPE> thẻ?

<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body>\n 

Làm cách nào để ngăn Nokogiri thực hiện việc này?

IE, khi tôi làm:

doc = Nokogiri::HTML("<div>some content</div>") 
doc.to_s 

hay:

doc.to_html 

tôi nhận được bản gốc:

<html blah><body>div>some content</div></body></html> 
+0

phiên bản Nokogiri? – shingara

+0

nokogiri (1.4.3.1) – holden

Trả lời

3

Phương pháp to_s trên Nokogiri::HTML::Document kết quả đầu ra một trang HTML hợp lệ, hoàn chỉnh với các yếu tố cần thiết của nó. Điều này không nhất thiết là những gì đã được chuyển cho trình phân tích cú pháp.

Nếu bạn muốn xuất ít hơn một tài liệu hoàn chỉnh, bạn sử dụng các phương pháp như inner_html, inner_text, v.v., trên một nút.

Chỉnh sửa: nếu bạn không mong muốn phân tích cú pháp một tài liệu XML đầy đủ, đúng ngữ pháp làm đầu vào, thì câu trả lời của TinMan là tốt nhất.

77

Sự cố xảy ra vì bạn đang sử dụng phương pháp sai trong Nokogiri để phân tích cú pháp nội dung của bạn.

require 'nokogiri' 

doc = Nokogiri::HTML('<p>foobar</p>') 
puts doc.to_html 
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
# >> <html><body><p>foobar</p></body></html> 

Thay vì sử dụng HTML mà kết quả trong một văn bản hoàn chỉnh, sử dụng HTML.fragment, mà nói Nokogiri bạn chỉ muốn đoạn phân tích cú pháp:

doc = Nokogiri::HTML.fragment('<p>foobar</p>') 
puts doc.to_html 
# >> <p>foobar</p> 
+1

Đây là câu trả lời đúng. Bỏ qua câu trả lời dưới đây. Bạn có thể chọn câu trả lời của chính mình làm câu trả lời đúng không? Điều đó thật kì lạ. – rainkinz

+0

Chỉ cần cho các hồ sơ, câu trả lời mà rainkinz được đề cập mà nên bỏ qua đã bị xóa :) –

+0

Cảm ơn người đàn ông! Đây là câu trả lời chính xác. –

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