Ruby Nokogiri--保留doctype和meta标记

Ruby Nokogiri--保留doctype和meta标记,ruby,file-io,nokogiri,doctype,ruby-1.9.2,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:la

我正在使用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>
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}
然后我将这个新文档写入如下文件:

<?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>
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文件的
doctype
meta
标记,因为当我用Nokogiri打开文档并尝试将其写入文件时,它们似乎正在丢失/更改


任何帮助都将不胜感激。谢谢

终于明白了:

我刚换了一行:

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

现在它就像我期待的那样工作。看起来有点不一致,但我相信这是有原因的


谢谢所有的建议@ezkl

你用的是什么版本的Nokogiri?很有趣。当我以类似的方式处理HTML时,
DOCTYPE
xml
声明的位置会被翻转,但其他所有内容都保持不变。请看。奇怪的是——脚本输出对我来说也是正确的(除了UTF-8被更改为US-ASCII)——可能是因为我正在覆盖旧的html文件——编码可能是从环境设置中提取的。我已经更新了要点,将HTML输出包含在我的系统中。太奇怪了——与您的脚本的唯一主要区别是我在rails应用程序中的resque worker中执行我的工作——但不确定这会如何影响输出