REXML er et kraftig verktøy for manipulering av XML som er en del av standardbiblioteket til Ruby.
1| require 'rexml/document' 2| include REXML 3| 4| xmltekst = DATA # Henter data etter __END__ 5| 6| def rekursiv_print( element, indent = 0 ) 7| print ' '*indent 8| case element 9| when Text 10| print element.to_s.gsub("\n", " ").strip, "\n" 11| when Element 12| print element.name, ' - ' 13| element.attributes.each{|key, val| print key, '="', val, '" ' } 14| print "\n" 15| element.each_child do |c| 16| rekursiv_print(c, indent+1) 17| end 18| end 19| end 20| 21| dok = Document.new( xmltekst ) 22| rekursiv_print( dok.root ) 23| 24| dok.elements.each("/html/body/code"){|elem| # xpath oppslag 25| puts elem.children.select{|child| child.kind_of? Text } 26| } 27| 28| __END__ 29| <html><title>Ruby-kurs</title> 30| <body> 31| <h1>Introduksjon</h1><p>Bla bla...</p> 32| <h2>Hei verden</h2> 33| <code lang="ruby">puts 'Hei verden'</code> 34| </body></html> |
Det er også kjekt når man vil konstruere XML-dokumenter.
1| require 'rexml/document' 2| 3| include REXML 4| 5| body = Element.new('body' ) 6| body << Element.new('h1') << Text.new('Introduksjon') 7| body << Text.new("\n") 8| body << Element.new('p') << Text.new('Hei & ha det!!') 9| 10| html = Element.new('html') 11| html.add body 12| 13| dok = Document.new 14| dok.add XMLDecl.new( "1.0", "iso-8859-1" ) 15| dok.add html 16| 17| puts dok |