2016-12-16 2 views
0

Je reçois un document finalDocument et je veux définir le même DocType que le document d'entrée xmlDocument. Voici comment je le fais:Pourquoi DocType est-il nul après la transformation?

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)); 

Cependant, pour une raison quelconque le DocType de finalDocument n'est pas réglé. Je ne reçois pas d'exception ou quoi que ce soit - c'est juste null.

Une idée de ce que je fais mal?

Btw: doctype.getSystemId() et doctype.getPublicId() ne sont pas NULL et valides.

+0

Eh bien, a-t-il un DocType pour commencer? Il n'est jamais mis à jour dans le fragment de code que vous affichez. –

+0

@ quarante-deux Voulez-vous dire 'finalDocument'? Est-ce important si elle en a un? – displayname

+0

En quoi l'étiquette w3c est-elle pertinente? Cela ne semble pas être une question sur la norme elle-même, mais plutôt sur un problème de programmation. – tambre

Répondre

1

votre variable finalDocument est transmis en tant que source pour la méthode transform:

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

Le résultat de la transformation est placé dans le second paramètre. Donc je m'attendrais à ce que le docType que vous avez défini avec le setOutputProperty soit placé sur la cible, qui est votre objet écrivain.

+0

True - c'est pourquoi vous ne devriez pas copier et coller du code d'un autre. ^^ – displayname