# File rexml/document.rb, line 199 def parse( source ) begin while not source.empty? word = source.match( /^\s*(<.*?)>/um ) source.match( /^\s*/um, true ) word = word[1] unless word.nil? case word when nil word = source.match( /\s*(\S+)/um, true ) return if word.nil? raise ParseException.new( "data found outside of root element (data is '#{word}')", source ) if word[0].strip.length > 0 when Comment::START_RE self.add( Comment.new( source ) ) when DocType::START_RE self.add( DocType.new( source ) ) when XMLDecl::START_RE x = XMLDecl.new( source ) source.encoding = x.encoding self.add( x ) when Instruction::START_RE self.add( Instruction.new(source) ) else Element.new( source, self, @context ) end end unless @elements.size == 1 #@children.find_all{|x| puts x if x.kind_of? Element } raise "the document does not have exactly one root" end rescue ParseException $!.source = source $!.element = self raise rescue Exception old_ex = $! raise ParseException.new("unidentified error", source, self, old_ex) end end