我想使用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片段文件?
在编写Nokogiri::HTML::DocumentFragment
时,似乎是Node#write_html_to
实现中的错误。我发现write_xhtml_to
工作正常:
doc.write_xhtml_to(File.new('write_xhtml_to.html', 'w'), :encoding => 'UTF-8')
# => <h1 id="foo">Hello</h1>
我一直使用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'))