Next Previous Contents

5. XML

5.1 REXML

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       


Next Previous Contents