XML-Datei mit Java einlesen und gegen ein Schema validieren

URL dieses Beitrags: http://blog.stefan-macke.com/2008/03/26/xml-datei-mit-java-einlesen-und-gegen-ein-schema-validieren/

Eine XML-Datei mit Java einzulesen und gegen ein XML-Schema zu validieren ist recht einfach, wenn man weiß wie es geht ;-)

Gut, dass es zu diesem Thema einige sehr gute Quellen im Internet gibt (z.B. XML Validation and XPath Evaluation in J2SE 5.0 oder Validation with Java and XML Schema, Part 3). Zuerst habe ich es mit der hier beschriebenen Vorgehensweise probiert: Validating with XML Schema. Kurz gesagt: man holt sich eine DocumentBuilderFactory und konfiguriert sie mittels setValidating(true), um die XML-Datei zu validieren. Dafür muss jedoch in der entsprechenden XML-Datei dann auf das XML-Schema verwiesen werden (mittels schemaLocation), was in meinem Fall zu Problemen beim Auflösen von Pfaden führte (die man aber sicher irgendwie umgehen kann). Darüber hinaus hat die Validierung von Constraints (in meinem Fall unique) nicht korrekt funktioniert, sodass ich den Weg über einen Validator gegangen bin.

Doch zunächst einmal mein Beispiel: Es handelt sich um eine XML-Datei, die (sehr einfach) den Aufbau einer Fertigungsanlage beschreibt (siehe Bild hier: Wegfindung mit dem A*-Algorithmus in Java). Eine ProductionPlant enthält Modules (die Teile der Anlage wie z.B. Förderbänder und Drehteller) und Connections zwischen diesen, die jedoch für mein Beispiel nicht wichtig sind. Jedes Module hat eine (eindeutige → unique) ID.

Der eigentliche Code, der nun die XML-Datei einliest und validiert, ist der folgende:

  1. // create a factory that understands namespaces and validates the XML input
  2. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  3. factory.setNamespaceAware(true);
  4. // read the XML file
  5. DocumentBuilder builder = factory.newDocumentBuilder();
  6. Document doc = builder.parse(new File("SamplePlant.xml"));
  7. // create a SchemaFactory and a Schema
  8. SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
  9. Source schemaFile = new StreamSource(new File("ProductionPlant.xsd"));
  10. Schema schema = schemaFactory.newSchema(schemaFile);
  11. // create a Validator object and validate the XML file
  12. Validator validator = schema.newValidator();
  13. validator.validate(new DOMSource(doc));
  14. System.out.println("XML file successfully validated.");

Download

In eine Klasse gepackt und um die import-Anweisungen und einen (einfachen) ErrorHandler ergänzt, gibt es das Ganze hier zum Download: PlantBuilder.

Wie folgt kann das kleine Programm gestartet werden:

Kompilierung und Ausführung von PlantBuilder

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Einen Kommentar schreiben

XHTML: Diese Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>