Nokogiri - 保留doctype和meta标签

时间:2011-08-01 20:20:48

标签: ruby file-io nokogiri doctype ruby-1.9.2

我正在使用nokogiri打开现有的html文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
   <title>Foo</title> 
</head> 
<body>
<!-- stuff -->
</body>
</html>

然后我改变了body标签的内容:

html_file = Nokogiri::HTML("path/to/html/file")
html_file.css('body').first.inner_html = "new body content"

然后我将这个新文档写入这样的文件:

File.open("path/to/new/html/file", 'w') {|f| f.write html_file}

这是我生成的html文件:

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

我的问题是,如果有可能告诉Nokogiri保留原始html文件的doctypemeta标签,因为当我用Nokogiri打开文档时,它们似乎丢失/更改了并尝试将其写入文件。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

终于明白了:

我刚改变了这句话:

html_file = Nokogiri::HTML("path/to/html/file")

html_file = Nokogiri::HTML(File.open("path/to/html/file").read)

现在它的工作方式就像我期待的那样。似乎有些不一致,但我确信这是有充分理由的。

感谢所有建议@ezkl!