require 'rexml/document'
include REXML

xmltekst = DATA   # Henter data etter __END__

def rekursiv_print( element, indent = 0 )
  print '  '*indent
  case element
  when Text
    print element.to_s.gsub("\n", " ").strip, "\n"
  when Element
    print element.name, ' - '
    element.attributes.each{|key, val|  print key, '="', val, '" ' }
    print "\n"
    element.each_child do |c| 
      rekursiv_print(c, indent+1)
    end
  end
end

dok = Document.new( xmltekst )  
rekursiv_print( dok.root )

dok.elements.each("/html/body/code"){|elem|  # xpath oppslag
  puts elem.children.select{|child| child.kind_of? Text }
}

__END__
<html><title>Ruby-kurs</title>
<body>
<h1>Introduksjon</h1><p>Bla bla...</p>
<h2>Hei verden</h2>
<code lang="ruby">puts 'Hei verden'</code>
</body></html>
