Mit Sax-Parser validieren

Status
Nicht offen für weitere Antworten.

BRT006

Aktives Mitglied
Hallo!

Auf welche Art kann ich dem SAX-Parser verklickern, gegen welches Schema bzw. DTD er validieren soll? Das dürfte wohl über die Properties gehen, welches wäre das denn?

THX,
Karsten
 
f o r e n s u c h e


Code:
SAXBuilder builder = new SAXBuilder(
	"org.apache.xerces.parsers.SAXParser", true); // Überprüft die Wohlgeformtheit
builder.setFeature("http://apache.org/xml/features/validation/schema", true ); //Aktiviere Schema-Validation
builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
		 new File("XSD-Datei").getAbsolutePath()); 
try {
    InputStream in = this.getClass().getResourceAsStream("Umfrage.xml");
    InputSource src = new InputSource(in);
    Document doc = builder.build(src);
} catch (JDOMException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
 
Bedauerlicherweise kann ich Xerces nicht in das Projekt importieren, muss das also irgendwie anders realisieren, den von dir geposteten Ausschnitt hab ich schon gesehen. Außerdem wäre dann noch die Frage offen nach dem DTD.
 
BRT006 hat gesagt.:
Bedauerlicherweise kann ich Xerces nicht in das Projekt importieren, muss das also irgendwie anders realisieren, den von dir geposteten Ausschnitt hab ich schon gesehen. Außerdem wäre dann noch die Frage offen nach dem DTD.
JA UND?

Welchen SAX-Parser setzt du ein?
=> Homepage suchen
=> Features durchsehen

Welche JAVA Version?
=> in Java5 SAXParserFactory#setSchema
 
Zugegeben, die Informationen waren recht spärlich. Sorry dafür. Eingesetzt wird Java 1.4 und nach Möglichkeit nichts zusätzliches. Mit Xerces hab ich eine Lösung gefunden, jedoch nicht mit 1.4-Bordmitteln. Und selbst beim Xerces hab ich keine Möglichkeit gefunden, ein DTD anzugeben anhand dessen validiert werden kann.

Ich nehme an dass es da irgendwelche Properties gibt, die ich setzen muss. Jedoch habe ich weder in der API noch bei google gefunden wie die heißen. Die alleine zu kennen würde mir wahrscheinlich schon weiterhelfen.

Wenn ich mit 1.4 einen Parser erzeuge

Code:
SAXParserFactory.newInstance().newSAXParser()

erhalte ich ein Objekt von org.apache.crimson.jaxp.SAXParserImpl

Wie sind hier die Properties für die Location eines DTD und eines Schemas?





So, ich hoffe ich habe das nun etwas treffender beschrieben. Danke schon mal...
 
vermute mal, dass der gute alte Crimson, der in der 1.4er dabei war überhaupt noch nicht in der Lage ist, gegen ein Schema zu validieren...

DTDs geht natürlich, aber dazu sollte dein Dokument eine DOCTYPE haben, geht alles automatisch, da brauchts keine Location
 
Irgendwie hatte ich das befürchtet. Kennst du bei Xerces die Property für eine DTD-Location? Ich bekomme XML-Dokument und DTD aus unterschiedlichen Quellen und würde gern auf ein Manipulieren des XML-Dokuments vor dem Parsen verzichten. Der Doctype-Eintrag existiert darin nämlich nicht.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben