ruby / rexml

REXML is an XML toolkit for Ruby
BSD 2-Clause "Simplified" License
125 stars 57 forks source link

Responds even after `:characters` has closed the root tag. #163

Closed naitoh closed 2 weeks ago

naitoh commented 3 weeks ago

xml = <<EOS

EOS

class Listener def method_missing(name, args) p [name, args] end end

puts "REXML" parser = REXML::Parsers::SAX2Parser.new(xml) parser.listen(Listener.new) parser.parse

puts "" puts "LibXML" parser = LibXML::XML::SaxParser.string(xml) parser.callbacks = Listener.new parser.parse

puts "" puts "Nokogiri" parser = Nokogiri::XML::SAX::Parser.new(Listener.new) parser.parse(xml)


```bash
$ ruby sax_test.rb
REXML
[:start_document]
[:start_element, nil, "root", "root", {}]
[:progress, 6]
[:characters, "\n"]
[:progress, 7]
[:end_element, nil, "root", "root"]
[:progress, 14]
[:characters, "\n"] #<= This
[:progress, 15]
[:end_document]

LibXML
[:on_start_document]
[:on_start_element_ns, "root", {}, nil, nil, {}]
[:on_characters, "\n"]
[:on_end_element_ns, "root", nil, nil]
[:on_end_document]

Nokogiri
[:start_document]
[:start_element_namespace, "root", [], nil, nil, []]
[:characters, "\n"]
[:end_element_namespace, "root", nil, nil]
[:end_document]

REXML responds even after :characters have closed the root tag. I don't think[:characters, "\n"] should respond after the root tag is closed. What do you think?

kou commented 3 weeks ago

I agree with you.