我正在尝试将保存JTree
文档的树(扩展名XML
)保存到已更改其结构的DOM Object
。
我创建了一个新的文档对象,遍历了树以成功检索内容(包括XML
文档的原始编码),现在有一个ByteArrayInputStream
具有树内容({ {1}}文档)使用正确的编码。
问题是当我解析XML
时,编码自动更改为ByteArrayInputStream
(在UTF-8
文档中)。
有没有办法阻止这种情况并使用XML
中提供的正确编码。
还有一点值得补充一点,我已经使用过了
ByteArrayInputStream
方法检索正确的编码。
任何帮助都将不胜感激。
答案 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