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.