2010-08-26 2 views
5

Я пытаюсь сохранить дерево (extends JTree), которое содержит документ XML, изменив его структуру на DOM Object.Java, XML DocumentBuilder - установка кодировки при разборе

Я создал новый объект документа, пройденное дерево, чтобы успешно извлекать содержимое (в том числе оригинальных кодирований XML документа), и теперь есть ByteArrayInputStream, который имеет содержимое дерева (XML документа) с правильным кодированием.

Проблема заключается в том, что при анализе ByteArrayInputStream кодировка автоматически изменяется на UTF-8 (в документе XML).

Есть ли способ предотвратить это и использовать правильное кодирование, как указано в ByteArrayInputStream.

Следует также отметить, что я использовал метод
transformer.setOutputProperty(OutputKeys.ENCODING, encoding) для получения правильной кодировки.

Любая помощь будет оценена по достоинству.

+0

Может ли ваша доля немного вашего кода? – gawi

ответ

2

Я решил это, учитывая много проб и ошибок.

Я использовал

OutputFormat format = new OutputFormat(document); 

но изменил его

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

и это решить мою проблему.

encoding является то, что я поставил его, чтобы быть
true относится ли или нет отступа установлен.

Примечание для самостоятельного чтения более внимательно - я посмотрел на javadoc несколько часов назад - если бы я только внимательно прочитал.

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

Некоторое объяснение этого кода было бы полезно для тех, кто придет и прочитает этот ответ позже. –

3

Вот обновленный ответ так OUTPUTFORMAT осуждается:

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

Вторая часть возвращает XML-документ в качестве строки

0

Это работало для меня и очень просто. Не требуется трансформатор или выходной форматтер:

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); 
Смежные вопросы