# Xml file gegen eine DTD validieren



## continue (28. Aug 2010)

Hallo,
ich habe ein kleines problem. und zwar müsste ich eine xml datei gegen eine dtd checken. im netz finde ich aber nur beispiele wo in der xml datei die entsprechende dtd im <!DOCTYPE> tag festgelegt wird. Könnte mir jemand ein einfaches Beispiel geben wie ich das anders machen könnte, sodass ich die dtd datei im code festlege gegen die validiert werden soll.

das ist mein derzeitiger code: 

```
public Document parseAndValidateXml(InputStream input) {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setValidating(true);
		factory.setNamespaceAware(true);

		DocumentBuilder builder;
		Document document = null;
		try {
			builder = factory.newDocumentBuilder();

			builder.setErrorHandler(new ErrorHandler() {

				@Override
				public void error(SAXParseException e) throws SAXException {
					System.out.println(e.getMessage() + " ERROR");
					validation_success = false;
				}

				@Override
				public void fatalError(SAXParseException e) throws SAXException {
					System.out.println(e.getMessage() + " FATALERROR");
					validation_success = false;
				}

				@Override
				public void warning(SAXParseException e) throws SAXException {
					System.out.println(e.getMessage() + " WARNING");
					validation_success = false;
				}

			});
			document = builder.parse(input);

		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return document;
	}
```

hier brauch ich nirgeds festlegen gegen welche dtd validiert werden soll weil das eben schon in der xml datei im doctype drin steht: <!DOCTYPE member SYSTEM "Member.dtd"> ... ich möchte diese zeile jedoch in den xml files entfernen und den pfad zur dtd datei selbst angeben im code.....
grüße


----------



## Noctarius (28. Aug 2010)

Geht glaub ich mit DocumentFactory.setSchema(...) wenn ich mich spontan recht entsinne (ich nutze nie DTD, wüsst auch nicht welchen Vorteil die gegenüber XSD hätten).


----------



## XHelp (29. Aug 2010)

Noctarius hat gesagt.:


> ich nutze nie DTD, wüsst auch nicht welchen Vorteil die gegenüber XSD hätten



Imho keine. XSD sind aber glaube ich ein Stück später (2 Jahre oder so) dazugekommen. DTDs wurden einfach nur zusammen mit der XML Spezifikation als solches eingeführt, deswegen die Lebensberechtigung.


----------



## Noctarius (29. Aug 2010)

XHelp hat gesagt.:


> Imho keine. XSD sind aber glaube ich ein Stück später (2 Jahre oder so) dazugekommen. DTDs wurden einfach nur zusammen mit der XML Spezifikation als solches eingeführt, deswegen die Lebensberechtigung.



Das ist mir schon klar, nur wieso heute noch so viele auf diese beschreibungssprache schwören ist mir schleierhaft. Den einzigen Vorteil den ich kenne, ist die Beschreibung eines CDATA Felds, was in XSD nicht möglich ist (warum auch immer ).


----------

