From: Kouhei Sutou Date: 2019-01-01T07:07:43+09:00 Subject: [ruby-list:50735] Re: 2.6.0でREXML::XPath.matchの振る舞いが変わった? 須藤です。 In <20181226.205303.1284198911746699450.kou@clear-code.com> "[ruby-list:50732] Re: 2.6.0でREXML::XPath.matchの振る舞いが変わった?" on Wed, 26 Dec 2018 20:53:03 +0900 (JST), Kouhei Sutou wrote: > で、今回のやつはマッチしなければいけないのにマッチしていない > やつなので、REXMLのバグです。ごめんなさい。 > > 2.6からはgem install rexmlで新しいバージョンを使えるようにな > るので少々お待ちください。 REXML::XPath.match(doc, "//*[@null:id='test']", {'null' => ''}) でもマッチするようにしたREXML 3.2.0をリリースしました。 > 以下が"http://www.w3.org/1999/xhtml"を返すのが悪い気がしてい > ますけど、これを変えると互換性が壊れるんですよねぇ。。。 > > p doc.root.elements["body"].attribute("id").namespace 非互換になるのですが、属性のデフォルトネームスペースの扱いの 修正も入っています。以下がどちらも""を返すようになります。 (前はprefixの方は"xhtml"を返して、namespaceの方は "http://www.w3.org/1999/xhtml"を返していました。) -- require "rexml/document" doc = REXML::Document.new(< XML p doc.root.elements["body"].attribute("id").prefix # "xhtml" -> "" p doc.root.elements["body"].attribute("id").namespace # "http://www.w3.org/1999/xhtml" -> "" -- もし、これで既存のアプリケーションが動かなくなるようなら変更 を戻そうかとも考えているのでそういうのがあったら教えてくださ い。 非互換にするのは嫌だったのですが、XML(ネームスペース)の仕 様で正しいとされている次のXMLがパースエラーになるのはXMLパー サーとしては深刻なバグだろうと思ったので直しました。 https://www.w3.org/TR/xml-names/#uniqAttrs