next up previous contents index
Search Next: Der Baumparser Up: Beispiele Previous: Formale Korrektheit überprüfen   Contents   Index


Der sequenzielle Parser

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>


\epsfig{height=36pt,file=images/chan.eps}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. \epsfig{height=10pt,file=images/ruby.eps}



(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20