2016-12-16 6 views
0

Ich erhalte ein Dokument finalDocument und möchte das gleiche DocType als das Eingabedokument xmlDocument setzen. Dies ist, wie ich es tun:Warum ist DocType nach der Umwandlung ungültig?

finalDocument = icBuilder.parse(new InputSource(new ByteArrayInputStream(xmlString.getBytes("UTF-8")))); 

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 

DocumentType doctype = xmlDocument.getDoctype(); 

StringWriter writer = new StringWriter(); 

transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype.getSystemId()); 
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype.getPublicId());  

transformer.transform(new DOMSource(finalDocument), new StreamResult(writer)); 

jedoch aus irgendeinem Grund die DocType von finalDocument nicht gesetzt ist. Ich bekomme keine Ausnahme oder irgendetwas - es ist nur null.

Irgendeine Idee, was ich falsch mache?

Btw: doctype.getSystemId() und doctype.getPublicId() sind nicht null und gültig.

+0

Nun, hat es einen DocType am Anfang? Es wird nie in dem angezeigten Code-Fragment aktualisiert. –

+0

@ zweiundvierzig Meinst du "finalDocument"? Ist es wichtig, ob es einen hat? – displayname

+0

Wie ist das w3c-Tag relevant? Dies scheint nicht nur eine Frage des Standards selbst zu sein, sondern ein Programmierproblem. – tambre

Antwort

1

Ihr finalDocument Variable wird als Quelle zur transform Methode übergeben:

void javax.xml.transform.Transformer.transform(Source xmlSource, Result outputTarget) throws TransformerException 

Das Ergebnis der Transformation ist in dem zweiten Parameter gesetzt. So würde ich erwarten, dass die docType, die Sie mit der setOutputProperty festgelegt haben, auf das Ziel platziert werden, das Ihr Schreiberobjekt ist.

+0

Richtig - deshalb sollten Sie den Code nicht kopieren und einfügen. ^^ – displayname

Verwandte Themen