Class SaxHandler

java.lang.Object
org.xml.sax.helpers.DefaultHandler
de.bsvrz.pat.datgen.generator.xmlParser.SaxHandler
All Implemented Interfaces:
ContentHandler, DTDHandler, EntityResolver, ErrorHandler

public class SaxHandler extends DefaultHandler
SAX-Handler für den Zugriff auf die XML-Datei.

Datensätze können Felder und Listen (im folgenden NonPlains genannt) enthalten. Würde man die XML-Datei "von Hand" verarbeiten, so hätte eine Methode datenVerarbeiten wohl einen rekursiven Aufbau (vgl DataGenerator.DataCycler#setRandomData(Data):


 IF (tag == "attribut") THEN
 		// Wert aus XML-Datei lesen
 ELSE IF (tag == "feld") THEN
 		FOR ALL (Feldelemente) DO
 			datenVerarbeiten();
 		ENDFOR
 ELSE IF (tag == "liste") THEN
 		FOR EACH (listenelement) DO
 			datenVerarbeiten();
 		ENDFOR
 ENDIF
 

Durch die Art des Einlesens der XML-Datei mit dem SAX-Parser (jedes Lesen eines Start-/Ende-Tags löst Aufruf einer der hier zu findenden Call-Back-Methoden aus), ist das rekursive Abarbeiten nicht möglich ==> Über einen Stack wird erreicht, daß die Zuordnung der eingelesenen Attribute zu den richtigen Einträgen in der rekursiven Datenstruktur gelingt:

Ein Datensatz vom Typ Data wird "lazy" erzeugt, d. h. enthält er ein NonPlain, so wird beim Erzeugen eines Data lediglich eine "flacher" Datenstruktur erzeugt, in die wiederum Datas für die NonPlains eingesetzt werden, die wiederum Datas für NonPlains enthalten können usw.

Die o. g. zunächst erzeugte flache Datenstruktur ist data. Jedes weitere für NonPlains erzeugte Data wird auf einen Stack gelegt. Durch readTop() wird nun erreicht, daß beim Einlesen eines Attributs immer das Data-Element gefüllt wird, welches sich gerade in Bearbeitung befindet, d. h. der Stack bildet das "Gedächtnis" des Parsers und "aus Sicht der Attribute" ist nur dieses Data-Element bekannt, wie es auch in einer rekursiven Methode der Fall wäre.

  • Constructor Details

    • SaxHandler

      public SaxHandler()
      Creates a new instance of SaxHandler
  • Method Details