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.

zurück                weiter

nach oben