本当は怖いHPC

HPC屋の趣味&実益ブログ

ruby 1.8.6のREXMLのバグを回避するコード

http://d.hatena.ne.jp/koseki2/20070516/rexmlbug
などでも触れられてるけど、けっこう困ったので回避する動的パッチを作った。
下のコードを、require 'rexml/document'の後に挿入すれば、修正できる。

tracにあげられているバグレポートに付属されていたパッチを丸写ししただけ。
作業時間5分。ビバ動的言語。書いててよかったユニットテスト

# 1.8.6のREXMLには名前空間と属性に関するバグがあるので、これを修正する
# http://www.germane-software.com/projects/rexml/ticket/102
if RUBY_VERSION == '1.8.6'
  module REXML  # reopen
    class Element
      def attribute( name, namespace=nil )
        prefix = nil
        prefix = namespaces.index(namespace) if namespace
        prefix = nil if prefix == 'xmlns' # <-- ここが修正点
        attributes.get_attribute( "#{prefix ? prefix + ':' : ''}#{name}" )
      end
    end
  end
end
【広告】