XML

Simple Example: parse whole file at once
This example is appropriate for small files only. Stream parsing is a necessity for larger XML files. require "rexml/document" file = File.new( ARGV[0] ) doc = REXML::Document.new file doc.elements.each('html/body/a') do |e| puts e.attributes["href"] end

Simple Example: change data and output
... doc.elements.each('html/body/a') do |e| e.attributes["href"] = "http://whatever.org/" end doc.write $stdout

Stream parsing
Stream parsing must be used for larger XML files. This example outputs the 'href'-attribute of all 'a' tags. require "rexml/document" require "rexml/streamlistener" class MyListener include REXML::StreamListener def tag_start(name, attrs) case name when "a" puts attrs["href"] end end end file = File.new( ARGV[0] ) REXML::Document.parse_stream(file,MyListener.new)

Stream parsing, change attributes
This is example could be used as a template for a program that outputs a copy of the input stream, but with certain attributes changed. class MyListener include REXML::StreamListener def tag_start(name, attrs) case name when "a" ...        else end e = REXML::Element.new(name) attrs.each do |att, value| e.attributes[att] = value end puts e.to_s.sub(/\/>/, '>') end def tag_end(name) puts REXML::Element.new(name).to_s.sub(/<(.*)\/>/, '') end end

SAX 2 parsing
?