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

確かに、REXMLはちょうどあなたがUTF-8エンコーディングにXMLを変更する場合は、中に入れたものを出力しているのに対し、鋸山は、ISO-8859-1を使用してテキストに変換されます。

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