REXMLでXML文書を作成するときに、XMLDeclオブジェクトをDocumentオブジェクトにaddすることで、XML宣言を指定できる。
Rubyソース:
このスクリプトを実行すると、次の結果XML文書が標準出力に書き出される。
結果文書:
XML宣言で文字エンコーディングを指定しているので、出力するときには指定のエンコーディングに変換されるのかと思ったが、どうもそうではないようだ。この結果文書をInternet Explorer6で表示すると、次のようなエラーが表示される。
テキストの内容に無効な文字が見つかりました。リソース 'file:///C:/TestEncoding.xml' の実行エラーです。ライン 1、位置 45
REXMLを使用してXML文書を作成する場合は、自分で文字エンコーディングを変換する必要があるようだ。以下のようにKconvモジュールを使用するとよいようだ。
Rubyソース(変換あり):
このスクリプトで生成されたXML文書はブラウザでも正しく表示された。
なお、この件についてはこちらのサイトで考察をされている。
【Rubyバージョン】1.8.6-p111-i386-mswin32
【OS】Windows XP Professional Edition + SP2
Rubyソース:
require "rexml/document" include REXML doc = Document.new doc.add( XMLDecl.new( "1.0", "UTF-8" ) ) ele = Element.new( "Test" ) doc.add( ele ) ele.add_text( "これはテストです。" ) doc.write( $stdout ) |
このスクリプトを実行すると、次の結果XML文書が標準出力に書き出される。
結果文書:
<?xml version='1.0' encoding='UTF-8'?> <Test>これはテストです。</Test> |
XML宣言で文字エンコーディングを指定しているので、出力するときには指定のエンコーディングに変換されるのかと思ったが、どうもそうではないようだ。この結果文書をInternet Explorer6で表示すると、次のようなエラーが表示される。
テキストの内容に無効な文字が見つかりました。リソース 'file:///C:/TestEncoding.xml' の実行エラーです。ライン 1、位置 45
REXMLを使用してXML文書を作成する場合は、自分で文字エンコーディングを変換する必要があるようだ。以下のようにKconvモジュールを使用するとよいようだ。
Rubyソース(変換あり):
require "rexml/document" require "kconv" include REXML doc = Document.new doc.add( XMLDecl.new( "1.0", "UTF-8" ) ) ele = Element.new( "Test" ) doc.add( ele ) ele.add_text( "これはテストです。".toutf8 ) doc.write( $stdout ) |
このスクリプトで生成されたXML文書はブラウザでも正しく表示された。
なお、この件についてはこちらのサイトで考察をされている。
【Rubyバージョン】1.8.6-p111-i386-mswin32
【OS】Windows XP Professional Edition + SP2