Nokogiri写_html_to奇怪?

时间:2014-06-06 16:10:28

标签: html ruby nokogiri

我想使用Nokogiri解析HTML片段,对其执行某些操作,并将有效的HTML写入文件。

这似乎很容易,但我很困惑为什么Nokogiri的doc.write_html_to方法将我的片段包装在空元素标记括号中。

# Try this in IRB
doc = Nokogiri::HTML.fragment('<h1 id="foo">Hello</h1>')

# Option #1 - Wrapped in Empty Tag
doc.write_html_to(File.new('write_html_to.html', 'w'), :encoding => 'UTF-8')
# => <><h1 id="foo">Hello</h1></>

# Option #2 - Works as needed
File.open('doc_to_html.html', 'w'){|f| f.write(doc.to_html(:encoding => 'UTF-8'))}
# => <h1 id="foo">Hello</h1>

为什么选项#1将HTML片段文件包装在空标签中的任何想法?

2 个答案:

答案 0 :(得分:2)

在撰写Node#write_html_to时,Nokogiri::HTML::DocumentFragment的实施似乎是一个错误。我发现write_xhtml_to正常工作:

doc.write_xhtml_to(File.new('write_xhtml_to.html', 'w'), :encoding => 'UTF-8')

# => <h1 id="foo">Hello</h1>

答案 1 :(得分:1)

我总是使用File.write进行单行写操作。它与使用Nokogiri write_html_to一样方便,比使用File.open更短的时间更短:

require 'nokogiri'

doc = Nokogiri::HTML.fragment('<h1 id="foo">Hello</h1>')
File.write('write_html_to.html', doc.to_html(encoding: 'UTF-8'))