SAX-Parser - Der validierende SAX-Parser
Möglicherweise ist euch aufgefallen, daß der SAX-Parser, so
wie wir ihn bisher benutzt haben, nicht validierend war. Nun kann es aber
sein, daß ihr genau das braucht, einen validierenden SAX-Parser.
Nehmen wir zum Beispiel an, ihr wollt ein kleines Programm schreiben,
das euch eure XML-Dokumente parst und validiert, und die Fehler entsprechend
ausgibt.
import com.ibm.xml.parsers.*; import org.xml.sax.*; public class Validator extends HandlerBase { public static void main(String[] args) { Validator validator = new Validator(); validator.validate(args[0]); } public void validate(String file) { ValidatingSAXParser parser = \new ValidatingSAXParser(); parser.setErrorHandler(this); try { parser.parse(file); } catch (Exception e) { System.err.println("Fehler beim parsen: "); System.err.println(e); } }
public void error(SAXParseException e) { System.out.println("Error: " + e); } public void fatalError(SAXParseException e) { System.out.println("Fatal Error: " + e); } public void warning(SAXParseException e) { System.out.println("Warning: " + e); } }
Wie ihr seht nichts neues an dieser Stelle. Wir haben einfach nur einen anderen Parser instantiiert, nämlich einen validierenden SAX-Parser. Und jetzt kommt die Sensation: der heißt ValidatingSAXParser! Ist doch erstaunlich, oder?
ValidatingSAXParser parser = new ValidatingSAXParser();
Wie ihr bemerkt habt, hab ich den IBM-Parser verwendet (das habt ihr doch gemerkt, oder?). Aber wie würde das ganze nun mit dem Sun-Parser aussehen? Nun, wenn ihr bisher die Kapitel aufmerksam verfolgt habt, dürftet ihr die Antwort schon kennen: Nicht viel anders. Es ändern sich lediglich die import-Statements, die Instantiierung des Parsers und die parse-Methode. Das ganze sieht dann folgendermaßen aus:
import com.sun.xml.parser.*; import org.xml.sax.*; import java.io.File; public class Validator extends HandlerBase { public static void main(String[] args) { Validator validator = new Validator(); validator.validate(args[0]); } public void validate(String file) { ValidatingParser parser = new ValidatingParser(); parser.setErrorHandler(this); try { parser.parse(Resolver.createInputSource(new File(file))); } catch (Exception e) { System.err.println("Fehler beim parsen: "); System.err.println(e); } } public void error(SAXParseException e) { System.out.println("Error: " + e); } public void fatalError(SAXParseException e) { System.out.println("Fatal Error: " + e); } public void warning(SAXParseException e) { System.out.println("Warning: " + e); } }
Wirklich neu ist an dieser Stelle nur der Name des validierenden SAX-Parsers von Sun:
ValidatingParser parser = new ValidatingParser();
Der Rest sollte euch aus vorangegangenen Kapiteln bekannt sein.