2

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


这个问题是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.

4

1 回答 1

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.

于 2013-09-17T14:33:16.363 回答