2011-06-09 112 views
1

有人可以解释为什么Nokogiri和REXML输出在下面的代码中有所不同。rexml和nokogiri XML解析

require 'rubygems' 
require 'Nokogiri' 
require 'rexml/document' 

xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> 
<yml> 
<a>TM and &#xA9; 2009</a> 
</yml>" 

puts 'nokogiri' 
doc = Nokogiri::XML(xml) 
puts doc.to_s, "\n" 

puts 'rexml' 
doc = REXML::Document.new(xml) 
puts doc.to_s 

输出:

nokogiri 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<yml> 
<a>TM and ? 2009</a> 
</yml> 

rexml 
<?xml version='1.0' encoding='ISO-8859-1'?> 
<yml> 
<a>TM and &#xA9; 2009</a> 
</yml> 

回答

1

当然,引入nokogiri正在将使用ISO-8859-1的文本,而REXML只是输出你把什么如果你改变了XML为UTF-8编码。那么你会得到:

nokogiri: 
<?xml version="1.0" encoding="utf-8"?> 
<yml> 
<a>TM and © 2009</a> 
</yml> 

rexml: 
<?xml version='1.0' encoding='UTF-8'?> 
<yml> 
<a>TM and &#xA9; 2009</a> 
</yml> 
+0

说如果我不能改变xml(从其他系统的输入)。无论如何,我可以得到nokogiri解析它像rexml(这不是转换文本) – ujj 2011-06-09 09:04:45