From: Federico Builes Date: 2008-03-22T07:35:47+09:00 Subject: Bugs in REXML Hi, I think the following behaviors of REXML can be considered as bugs but I wanted a small confirmation before implementing some patches: 1) XML Documents accept more than 1 XMLDecl (which is not allowed by http://www.w3.org/TR/xml/#NT-prolog) irb(main):001:0> require 'rexml/document' irb(main):002:0> d = REXML::Document.new("") irb(main):004:0> d.add REXML::XMLDecl.new irb(main):005:0> d.add REXML::XMLDecl.new => [, , ] irb(main):006:0> d.write This behavior can be seen with "Document#to_s" and "Document#children" too. It goes back to: ruby_1_9/lib/rexml/document.rb:70 if child.kind_of? XMLDecl @children.unshift child child.parent = self elsif... Since it's not verifying if a XMLDecl already exists for the document. 2) DocTypes are being added to the end of the document. This bug has been reported in http://www.germane-software.com/projects/rexml/ticket/120 for at least 4 months. To add a bit more, I _think_ this condition will fail (kind_of without "?" unless it's defined like that somewhere else) but it'll never be met: ruby_1_9/lib/rexml/document.rb:80 if @children[ insert_before_index ] # Not null = not end of list if @children[ insert_before_index ].kind_of DocType Since insert_before_index will be the expected position + 1. Again, as I said earlier, I'm not entirely sure if my reasonings are fine but I know the errors are there in 1.8 and probably 1.9 (unless I'm missing something). Comments? -- Federico