Das folgende Beispiel ist hilfreich beim Analysieren von XML-Daten.
Für jede Entity der Datei wird der Klassenname ausgegeben. Dazu wird
die Methode to_s für die im Modul NQXML definierten Klassen so
geändert, dass sie für die vorkommenden Bestandteile den Klassennamen
ausgibt.
require 'nqxml/streamingparser'
module NQXML
class Entity
def to_s
return "#{self.class}."
end
end
class Text
def to_s
return "#{self.class}."
end
end
end
aFile = File.new("Personen.xml")
begin
parser = NQXML::StreamingParser.new(aFile)
parser.each { | entity | puts entity.to_s }
rescue NQXML::ParserError => ex
puts "Fehler in Zeile #{ex.line}" +
" bei Zeichen #{ex.column}: #{$!}"
end
Wird dieses Programm mit der Datei Personen.xml gefüttert,
bekommt man folgende Ausgabe:
NQXML::XMLDecl. NQXML::Text. <personen> NQXML::Text. <kunde> NQXML::Text. <name nachname="Diamonds" vorname="Rubyette"> </name> NQXML::Text. <email> NQXML::Text. </email> NQXML::Text. <computer> NQXML::Text. </computer> NQXML::Text. </kunde> NQXML::Text. </personen>
Ein XML-Parser legt normalerweise Wert auf Whitespace, auch zwischen den
Elementen. Damit werden die Zeilenwechsel und Einrückungen, die das
XML-Dokument übersichtlicher machen, als eigenständige Objekte identifiziert.