我想使用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片段文件包装在空标签中的任何想法?
答案 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'))