2013-04-26 11 views
5

Ich versuche ein XML-Dokument mit Xerces-J zu validieren.Verwenden von Xerces-j zum Validieren eines XML-Dokuments

Ich möchte, dass der Validator alle zugeordneten XSD- oder DTD-Dateien aufliest und auflöst (mit Hilfe von Schemalokation, nonnamespaceschmalocationa und DOCTYPE-Referenzen). Es scheint, dass das Laden dieser Ressourcen an eine Resolver-Klasse delegiert werden kann.

Alle Proben, die ich gesehen habe, beginnen jedoch damit, einen Validator aus einem Schema zu erstellen.

Ist es möglich, dies anders herum zu fahren, Xerces zu bitten, das XML-Dokument zu validieren und es laden zu lassen, oder muss ich zuerst die XML-Datei nach Schemareferenzen durchsuchen, sie laden und dann ein erstellen Validator aus den Schemas?

In einer idealen Welt würde der Prüfer auch XSD 1.1

Antwort

3

Sie bieten einen Parser mit einem EntityResolver unterstützen zu verwenden, wenn <! DOCTYPE Erklärungen oder Schemaattribute aufzublicken. Der gebräuchlichste Entity Resolver verwendet Katalogdateien, bei denen es sich im Wesentlichen um XML-Dateien oder Textdateien handelt, die ein Wörterbuch mit öffentlichen IDs, System-IDs und URIs für physische Dateien definieren. Siehe das org.apache.xml.resolver Paket. Sie können aber auch Ihre eigene EntityResolver Implementierung bereitstellen.

CatalogResolver resolver = new CatalogResolver(); 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setValidating(true); 
dbf.setFeature("http://apache.org/xml/features/validation/dynamic", true); 
DocumentBuilder parser = dbf.newDocumentBuilder(); 
parser.setEntityResolver(resolver); 
Document doc = parser.parse(someFile);