From: "kou (Kouhei Sutou)" Date: 2013-11-16T19:05:42+09:00 Subject: [ruby-dev:47808] [ruby-trunk - Bug #9061] REXML::Parsers::UltraLightParser で doctype を含む XML のパースがうまくいかない Issue #9061 has been updated by kou (Kouhei Sutou). 遅くなりましたがテストを追加してパッチをそのまま取り込みました! 報告ありがとうございました! ---------------------------------------- Bug #9061: REXML::Parsers::UltraLightParser で doctype を含む XML のパースがうまくいかない https://bugs.ruby-lang.org/issues/9061#change-42974 Author: ohai (Ippei Obayashi) Status: Closed Priority: Normal Assignee: kou (Kouhei Sutou) Category: lib Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN 以下のコード (test_ulp.rb) require 'rexml/parsers/ultralightparser' require 'pp' pp REXML::Parsers::UltraLightParser.new(< ]> XML を動かすと、期待される出力は [[:xmldecl, "1.0", "UTF-8", nil], [:text, "\n"], [:doctype, [...], "root", "SYSTEM", "foo", nil, [:entitydecl, "f", "bar"], [:entitydecl, "g", "baz"]], [:text, "\n"], [:start_element, [...], "root", {}], [:text, "\n"]] のようなものですが、実際には [[:xmldecl, "1.0", "UTF-8", nil], [:text, "\n", [:text, "\n"], [:start_element, [...], "root", {}], [:text, "\n"]], [:start_doctype, "root", "SYSTEM", "foo", nil], [:entitydecl, "f", "bar"], [:entitydecl, "g", "baz"]] のようなものが出力されます。この出力は木構造上の :start_element や :start_doctype の位置が期待される場所と異なります。 この挙動は ruby 2.1.0dev (2013-10-29 trunk 43466) [x86_64-linux] および ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] で確認しました。 添付したパッチ(rexml-ultralightparser.patch)のように変更するとうまく動くと思います。 -- http://bugs.ruby-lang.org/