Ruby 1.8.6のREXML/XPathのバグ

Ruby 1.8.6でXML構文を扱うとき、XPathがうまく機能しないバグがあるそうです。Rubyのソースファイルを修正すると正常に動作します。

修正ファイル: /usr/lib/ruby/1.8/rexml/element.rb

修正箇所:
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

参考:
#102 (Cannot select attribute with default namespace) – rexml – Trac

関連する記事

このサイトの内容は私の個人的な見解であり、私の所属するいかなる団体や組織の見解を反映しているものではありません。

コメント数: 2

  1. Mocel :

    こういうのは普通 patch で配るんだよ。

    ファイル名 element.rb.patch:
    *** element.rb.orig Sun Nov 25 22:32:41 2007
    — element.rb Sun Nov 25 22:33:20 2007
    ***************
    *** 553,558 ****
    — 553,559 —-
    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

    このファイルを使って、element.rb がある場所で

    > patch

  2. なんば :

    Mocelさん

    教えてくれてありがとうー。
    参考にしたサイトにもそのスタイルでソースコードが書かれていたから、何か特別な記述法だとは思ったけど、patchっていうコマンドがあるとは知りませんでした。