# DOCTYPE Problem beim Transformer/TransformerFactory etc.



## Guest (3. Apr 2006)

hallo,
ich verwende momentan folgenden Code um mein Document in einer xml abzuspeichern:


```
try {
      	           File file = new File("personenVerwaltung.xml");
		   TransformerFactory transformerFactory = TransformerFactory.newInstance();
		   Transformer transformer = transformerFactory.newTransformer();
		   transformer.setOutputProperty(OutputKeys.INDENT,"yes");			
		   DOMSource source = new DOMSource(configDocument);
		   StreamResult result = new StreamResult(file);
		   transformer.transform(source,result); 
		} catch(TransformerConfigurationException tce) {
      	tce.printStackTrace();
      } catch(TransformerException te){
         te.printStackTrace();
      }
```

Vorher lese ich eine andere XML Datei an und füge Datensätze dazu, ändere was. etc. Schließlich will ich mit obigem
Code-Fragment die neue Version wieder speichern, also die alte "überschreiben".

Leider übernimmt er aber die DOCTYPE sachen aus der ursprünglichen Datei nicht.

Hab schon versucht über die Methode setOutputProperty von Transformer was zu machen ,da es in OutputKeys:
DOCTYPE_PUBLIC und DOCTYPE_SYSTEM gibt. 
Doch egal wie ich es versuch, er speichert einfach nicht die DOCTYPE Sachen aus der ursprungs-datei  ???:L 

Habe auch schon versucht über getDoctype() von Document was zu machen, aber funktioniert nicht so richtig.

Hoffe ihr wisst was ich meine.....weiss einfach net weiter...


----------



## Gast (5. Apr 2006)

hmm....ist die frage so trivial oder kann mir keiner helfen? falls euch was unklar ist, sagt es bitte, vielleicht kann ich ja noch mehr informationen liefern die das problem beschrieben.


----------



## Gast (7. Apr 2006)

Dank Roars Hilfe konnte ich jetzt folgendes machen:


```
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"dtd.name");
```

Das funktioniert aber nur für SYSTEM...nicht für PUBLIC ???


----------



## Roar (7. Apr 2006)

ja wie wärs dann mit OutputKeys.DOCTYPE_PUBLIC ? :autsch:


----------



## Gast (7. Apr 2006)

ich meinte damit ja wenn ich obige Zeile ersetze durch:


```
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"dtd.name");
```

dann funktioniert es nicht mehr....war oben etwas schreibfaul *g*


----------



## Roar (7. Apr 2006)

:? wieso ersetzen? ohne system kein public....


----------



## Gast (7. Apr 2006)

ja, aber ich will doch folgenden Aufbau:


```
<!DOCTYPE root PUBLIC "name.dtd">
```

und nicht anstatt PUBLIC - SYSTEM. oder versteh ich was falsch?


----------



## Roar (7. Apr 2006)

das geht so nicht. du *musst* den system pfad setzen


----------



## Gast (7. Apr 2006)

hmm....das wundert mich doch etwas...der unterschied ist doch das SYSTEM eine private DTD kennzeichnet und PUBLIC eine öffentliche.

Und außerdem ist doch folgendes gültig oder:

```
<!DOCTYPE Email PUBLIC "-//IchAg//DTD EMail V 1.0//DE"
"http://www.myweb.de/dtd/email.dtd">
```

entnommen aus "XML - Extensible Markup Language von Anfang an"


----------



## Roar (7. Apr 2006)

ja das ist gültig, eben weil dort sowohl eine system als auch eine public dtd vorhanden ist :autsch:


----------



## Gast (7. Apr 2006)

hmm...da hab ich wohl was durcheinander geschmissen....tut mir leid.

Die "http://www.myweb.de/dtd/email.dtd" setz ich dann über DOCTYPE_PUBLIC und "-//IchAg//DTD EMail V 1.0//DE"  über DOCTYPE_SYSTEM oder wie soll ich das verstehen?


----------



## Roar (7. Apr 2006)

andersrum :lol:


----------



## Gast (7. Apr 2006)

*g* Ok....50 : 50  Werds dann mal probieren und posten obs tatsächlich geklappt hat oder ob ich dafür auch zu dumm bin *g*

Danke nochmal.


----------



## Gast (7. Apr 2006)

danke..also das mit dem DOCTYPE funktioniert jetzt, auch wenns nen anderes problem gibt..werd erstmal selbst damit rumprobieren...thread kann abgehakt werden.


----------

