# XML mit externer DTD validieren



## HannesBacke (6. Dez 2004)

Hi,
ich habe einen Java Parser der mir meine XML-Datei validiert.
Innerhalb dieser Datei wird die DTD angegeben:

```
<!DOCTYPE Knoten SYSTEM "xyz.dtd">
```

Nun möchte ich allerdings selber eine DTD im JAVA-Code angeben
können, die zur Validierung genutzt wird. Es kommt nämlich vor,
dass innerhalb der XML-Datei nicht auf eine DTD verwiesen wird.

Meine Frage also:
wir kann ich eine DTD zur Validierung einer XML-Datei laden?

Mein Code:

```
SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser",true);
Document doc = saxBuilder.build(new File(filename));
saxBuilder.setValidation(true);
```


----------



## foobar (6. Dez 2004)

> Es kommt nämlich vor,
> dass innerhalb der XML-Datei nicht auf eine DTD verwiesen wird.


Um sicher zu gehen daß es sich bei einen Datei um valides XML handelt, muß die DTD innerhalb der Instanz angegeben werden. 
Anders macht es auch gar keinen Sinn.


----------



## Bleiglanz (6. Dez 2004)

Antwort: hängt vom verwendeten Parser ab

suche im Forum

war erst letzte Woche dran, schau doch einfach mal in den Bereich XML & Co, da steht

XML mit externer DTD validieren
XML Datei nach bestimmter Grammatik erstellen
Knoten nach Inhalt auswählen
servlet deklaration in web.xml
Elemente aus XML-File löschen (JDom)
[JDOM] XML File, neue Daten hinzufügen
Java Code in XML
XML Dokument mit DTD validieren // <!-- WAS IST DENN DAS?


----------



## Bleiglanz (6. Dez 2004)

wenns denn der xerces sein soll

http://xml.apache.org/xerces2-j/faq-xcatalogs.html


----------



## HannesBacke (6. Dez 2004)

Bleiglanz hat gesagt.:
			
		

> Antwort: hängt vom verwendeten Parser ab
> 
> ...
> 
> XML Dokument mit DTD validieren // <!-- WAS IST DENN DAS?



Die Suche habe ich natürlich vorher benutzt, allerdings steht in dem Beitrag
nur drin wie man eine DTD innherhalb der XML einbindet, ich habe aber
das Problem, dass ich keinen Einfluss auf die XML-Datei habe.
Ich bekomme sie zugeschickt und moechte sie gerne mit meiner DTD
validieren. Also muss ich im Java angeben welche DTD er für meine
XML nehmen soll.
Aber wie?


----------



## Bleiglanz (6. Dez 2004)

erzeug dir einfach eine neue temporäre Datei, die du per Stringmanipulation mit dem entsprechenden 

<!DOCTYPE Knoten SYSTEM "xyz.dtd">

aufpeppst, das ist am einfachsten


----------



## HannesBacke (6. Dez 2004)

Bleiglanz hat gesagt.:
			
		

> erzeug dir einfach eine neue temporäre Datei, die du per Stringmanipulation mit dem entsprechenden
> 
> <!DOCTYPE Knoten SYSTEM "xyz.dtd">
> 
> aufpeppst, das ist am einfachsten



Das wird wahrscheinlich das einfachste sein. Ist schon komisch, dass es keine
Möglichkeit gibt die DTD extra anzugeben.
Naja, was solls.


----------



## Bleiglanz (6. Dez 2004)

es geht irgendwie (z.B. mit XMLFilter die nötigen SAX events hineinflicken) oder über spezielle Eigenschaften des Parsers; scheint mir alles viel zu frickelig


----------



## HannesBacke (6. Dez 2004)

Bleiglanz hat gesagt.:
			
		

> es geht irgendwie (z.B. mit XMLFilter die nötigen SAX events hineinflicken) oder über spezielle Eigenschaften des Parsers; scheint mir alles viel zu frickelig



Also wenn noch irgendjemand einen wirklich nützlichen Tipp hat, wäre ich sehr dankbar, ansonsten muss ich halt in die XML-Datei den Pfad zur DTD schreiben.


----------

