gemで0.8.3からupdateしたら動かないスクリプトが出てきた。
XML::Document#to_s がエラーになる。
CHANGESを見ると
- 出力オプションをHash指定に変えた
- エンコード名を文字列指定からLibXML::XML::Encoding下の定数指定に変えた
前者はともかく後者は面倒だなー。というのもjrubyでも使うスクリプトなのでtransformer.setOutputProperty(javax.xml.transform.OutputKeys::ENCODING, エンコード名な文字列) とI/Fを合わせて文字列指定で作ってたから。
libxml-rubyのマニュアルによればエンコード名文字列から定数を得るI/Fがあるみたいなんだけど、どうも期待した結果にならない。
(マニュアル上はInput.s_to_encoding("UTF_8") なんだけどext/libxml/ruby_xml_encoding.cを見るとfrom_sのようで混乱する)
$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'libxml'
=> true
irb(main):003:0> LibXML::XML::Encoding.from_s("UTF_8")
=> -1
irb(main):004:0> LibXML::XML::Encoding.from_s("UTF-8")
=> false
irb(main):005:0> LibXML::XML::Encoding.from_s("utf8")
=> false
irb(main):006:0> LibXML::XML::Encoding.from_s("utf-8")
=> false
irb(main):007:0> LibXML::XML::Encoding.from_s("utf_8")
=> -1
irb(main):008:0>
とりあえず文字列をいじくって定数名とみなしてお茶にごす。
alias名が困るなー
const_name = encoding_name.gsub(/-/, "_").upcase
encoding = LibXML::XML::Encoding.const_get(const_name)
doc.to_s(:encoding => encoding)
環境
- CentOS 5.2 i686
- libxml2: 2.6.26-2.1.2.7
- ruby: 1.8.5-5.el5_2.6
- rubygems: 1.3.1
- libxml-ruby: 0.9.8 (gem)
>> Home