Nokogiri to_xhtml将doctype放在<! - ?xml - >之前

时间:2013-09-17 05:52:52

标签: ruby nokogiri

我正在尝试使用Nokogiri来解析和更新一些xhtml文件(修复图像大小)。

解析和更新效果很好但是当我用以下文件保存文档时

doc.to_xhtml(:indent_text => "\t", :indent=>1, :encoding => 'UTF-8')

前两行改为(原始):

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

到(输出):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<?xml version="1.0" encoding="utf-8"??>

这不是一个有效的xml文档(并且在xml标记的末尾也有一个双?)。

我做错了吗?

修改:我安装了nokogiri (1.6.0),这似乎是最新版本。

1 个答案:

答案 0 :(得分:2)

这个问题在Github上是一个开放的(尽管很老的)Nokogiri问题,尽管它可能实际上是libxml问题。我能够复制你的输出。

快速解决方法是使用Nokogiri::XML而不是Nokogiri::HTML来解析您的文档,这在处理XHTML文件时可能是更好的做法:

doc = Nokogiri::XML(open 'wherever')
doc.to_xhtml(:indent_text => "\t", :indent=>1, :encoding => 'UTF-8')

请注意,这不会保留您的XML处理指令。如果需要,请使用to_xml