我正在尝试使用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)
,这似乎是最新版本。
答案 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
。