2011-06-09 104 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