[ruby-list:50732] Re: 2.6.0でREXML::XPath.matchの振る舞いが変わった?

From: Kouhei Sutou <kou@...>
Date: 2018-12-26 11:53:03 UTC
List: ruby-list #50732
須藤です。

In <20181226.135638.487629901574032173.yasu@utahime.org>
  "[ruby-list:50731] 2.6.0でREXML::XPath.matchの振る舞いが変わった?" on Wed, 26 Dec 2018 13:56:38 +0900 (JST),
  Yasuhiro KIMURA <yasu@utahime.org> wrote:

> 以下のようなスクリプトを実行すると2.5.3では"1"と表示されますが2.6.0で
> は"0"と表示されます。
> 
> 2.6ではXPath式の解釈に何か変更があったのでしょうか。

もっとちゃんと解釈するようになりました。

2.5の頃は↓のように適当なネームスペースURIでもマッチしていま
した。

REXML::XPath.match(doc, "//*[@null:id='test']", {'null' => 'XXX'})

で、今回のやつはマッチしなければいけないのにマッチしていない
やつなので、REXMLのバグです。ごめんなさい。

2.6からはgem install rexmlで新しいバージョンを使えるようにな
るので少々お待ちください。

もし、以下のように少しゆるくしても一意になるならとりあえず以
下でしのいでおいてください。

REXML::XPath.match(doc, "//*[@id='test']")


以下が"http://www.w3.org/1999/xhtml"を返すのが悪い気がしてい
ますけど、これを変えると互換性が壊れるんですよねぇ。。。

p doc.root.elements["body"].attribute("id").namespace

In This Thread