2010-08-26 12 views
5

Sto tentando di salvare un albero (si estende JTree) che contiene un documento XML in un DOM Object dopo aver modificato la sua struttura.Java, XML DocumentBuilder - impostazione della codifica durante l'analisi

ho creato un nuovo oggetto di documento, attraversato l'albero per recuperare il contenuto con successo (tra cui la codifica originale del documento XML), e ora hanno un ByteArrayInputStream che ha il contenuto degli alberi (XML documento) con la codifica corretta.

Il problema è quando analizzo la ByteArrayInputStream la codifica viene modificata in UTF-8 (nel documento XML) automaticamente.

C'è un modo per evitare questo e utilizzare la codifica corretta come previsto dalla ByteArrayInputStream.

Vale anche la pena aggiungere che ho già utilizzato il metodo per recuperare la codifica corretta.

Qualsiasi aiuto sarebbe apprezzato.

+0

È possibile condividere un po 'del codice? – gawi

risposta

2

Ho risolto, dato un sacco di prove ed errori.

stavo usando

OutputFormat format = new OutputFormat(document); 

ma lo cambiò in

OutputFormat format = new OutputFormat(d, encoding, true); 

e questo risolto il mio problema.

encoding è quello che ho impostato per essere
true riferisce al fatto rientro o non è impostato.

Nota per auto-leggere più attentamente - avevo guardato il javadoc ore fa - se solo avessi letto più attentamente.

3
// Read XML 
String xml = "xml" 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document document = builder.parse(new InputSource(new StringReader(xml))); 

// Append formatting 
OutputFormat format = new OutputFormat(document); 

if (document.getXmlEncoding() != null) { 
    format.setEncoding(document.getXmlEncoding()); 
} 

format.setLineWidth(100); 
format.setIndenting(true); 
format.setIndent(5); 
Writer out = new StringWriter(); 
XMLSerializer serializer = new XMLSerializer(out, format); 
serializer.serialize(document); 
String result = out.toString(); 
+11

Alcune spiegazioni di questo codice sarebbero utili per coloro che vengono a leggere questa risposta in seguito. –

3

Ecco una risposta aggiornata dal OutputFormat è deprecato:

TransformerFactory tf = TransformerFactory.newInstance(); 
Transformer transformer = tf.newTransformer(); 
transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); 

StringWriter writer = new StringWriter(); 
transformer.transform(new DOMSource(document), new StreamResult(writer)); 
String output = writer.getBuffer().toString().replaceAll("\n|\r", ""); 

La seconda parte restituirà il documento XML come stringa

0

Questo ha funzionato per me ed è molto semplice. Non è necessario un trasformatore o un formattatore di uscita:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
InputSource is = new InputSource(inputStream); 
is.setEncoding("ISO-8859-1"); // set your encoding here 
Document document = builder.parse(is); 
Problemi correlati