# xml-datei mit dtd vergleichen



## Morgen (1. Feb 2006)

Schönen guten Morgen allerseits, 

habe ein kleines Problem: Schreibe mir ein kleines Programm und möchte zur Kontrolle meine XML-Dateien gegen eine DTD laufen lassen.
Bin aber zu "faul" des selber zu schreiben, weils ja nur ne kleine Kontrolle sein soll. Hab schon einiges gegooglt, aber nix brauchbares gefunden.

Deswegen: Hat zufällig jemand so eine Funktion?

Wäre euch sehr dankbar!

Mfg, der faule


----------



## Bleiglanz (1. Feb 2006)

ja, aber ich bin jetzt zu faul

-> forumssuche nach "validierung"


----------



## byte (1. Feb 2006)

da muss man nicht mal lange suchen, sondern einfach ein paar posts weiter unten gucken.


----------



## Morgen (1. Feb 2006)

hab schon alle einträge gelesen, die mit dem thema zu tun haben.

habe mit jdom folgendes geschrieben: 


```
String XMLDateiPath="C:\\test.xml";
		
		File xml=new File(XMLDateiPath);
		SAXBuilder builder = new SAXBuilder();
		
		Document doc = builder.build(xml);
		
		builder.setValidation(true);
```

die test.xml sieht am anfang folgendermaßen aus: 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE GCFARCHIVE SYSTEM "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Peter Oehm\Projekt\JDOM\GCFARCHIVE_V1.dtd">
<GCFARCHIVE version="1">

reicht .setValidation(true) um die xml datei mit der in der xml datei angegebenen pfad zur dtd datei zu vergleichen?

habs einfach mal durchlaufen lassen und es wurde keine exception geworfen. 
dann hab ich in der xml einfach was gelöscht und nochmal durchlaufen lassen, wieder keine exception. 

???

hab ich da was falsch verstanden, oder bin ich einfach nur bescheuert?

mfg


----------



## bazz-dee (1. Feb 2006)

SAX unterstützt doch keine DTD oder? dazu musst du nen DOM parser nutzen.


----------



## Morgen (1. Feb 2006)

argh! nich wirklich?!

dann muss ich wohl mal weiterschaun...

aber grundsätzlich reicht des um die xml mit der dtd zu validieren?

mfg


----------



## byte (1. Feb 2006)

Sicher geht das, aber Du musst die Validierung schon aktivieren.

http://www.jdom.org/docs/apidocs/org/jdom/input/SAXBuilder.html


```
SAXBuilder builder = new SAXBuilder(true);
```

Wenn Du die Validierung aktivierst, nachdem das Document erzeugt ist, dann ist der Zug doch schon abgefahren.


----------



## Bleiglanz (1. Feb 2006)

wenn du nur validieren willst dann nimm SAX, wozu einen DOM Baum aufbauen???

z.B. so (schmeisst eine Exception wenn "irgendwas" nicht stimmt"

```
private static void validate(InputStream is) throws Exception {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setValidating(true);
        SAXParser saxParser = factory.newSAXParser();
        saxParser.parse(is, new DefaultHandler() {
            @Override
            public void error(SAXParseException e) throws SAXParseException {
                throw e;
            }
            @Override
            public void warning(SAXParseException e) throws SAXException {
                throw e; // seien wir paranoid und schmeissen auch warnings
            }
        });
    }
```


----------



## morgen (1. Feb 2006)

also erst mal danke für eure beiträge.

möchte noch erwähnen, dass ich nich grad der "java-checker" bin...

hab nun auch schon etwas dazu gefunden, ohne dom, dom4j oder jdom die xml mit der dtd zu validieren...

@Bleiglanz: was für einen inputstream muss ich validate denn liefern? sry bin aber wirklich nich grad der held...


----------



## Bleiglanz (1. Feb 2006)

z.B. einen new FileInputStream(new File("diedatei.xml"));


----------



## morgen (1. Feb 2006)

hehe vielen dank! 

auf so ne lösung wär ich echt nie gekommen... 

mfg


----------

