2011-08-01 23 views
0

我使用引入nokogiri打开现有的HTML文件看起来像这样:引入nokogiri - 保存文档类型和meta标签

<?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文件的doctypemeta标签,因为它看起来像他们正在丧失/当我打开与引入nokogiri文档,并试图写改它到一个文件。

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

+0

您使用的是什么版本的Nokogiri? –

+0

看起来像1.5.0 – mportiz08

+0

有趣。当我以类似的方式处理HTML时,“DOCTYPE”和“xml”声明的位置会翻转,但其他所有内容都保持不变。看[这个要点](https://gist.github.com/f357da62d5fde62fdd7d)。 –

回答

1

终于想通了:

我只是改了行:

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

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

和现在的作品像我期待它。似乎有点不一致,但我确信这有一个很好的理由。

感谢所有的建议@ezkl!