Java,XML DocumentBuilder - 在解析时设置编码

时间:2010-08-26 18:42:43

标签: java xml encoding xml-parsing domdocument

我正在尝试将保存JTree文档的树(扩展名XML)保存到已更改其结构的DOM Object

我创建了一个新的文档对象,遍历了树以成功检索内容(包括XML文档的原始编码),现在有一个ByteArrayInputStream具有树内容({ {1}}文档)使用正确的编码。

问题是当我解析XML时,编码自动更改为ByteArrayInputStream(在UTF-8文档中)。

有没有办法阻止这种情况并使用XML中提供的正确编码。

还有一点值得补充一点,我已经使用过了     ByteArrayInputStream方法检索正确的编码。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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 Document作为String返回

答案 2 :(得分:2)

我解决了它,给出了很多试验和错误。

我正在使用

OutputFormat format = new OutputFormat(document);

但将其更改为

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

这解决了我的问题。

encoding是我设定的 true指的是是否设置了缩进。

请注意自我阅读 - 我几小时前看过javadoc - 如果我更仔细阅读的话。

答案 3 :(得分:0)

这对我有用,而且非常简单。无需变压器或输出格式化器:

package.json