我已经查看了stackoverflow上的帖子,但似乎没有任何帮助。
以下是:
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 2);
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(xmlDoc);
StreamResult result = new StreamResult(new File("C:\\testing.xml"));
transformer.transform(source, result);
这就是我得到的结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Satellite SatelliteName="" XmlFileVersion="">
<test0>
<test1>
<test2>
<test3>
<test4>
<test5>
<test6>
<test7>
<test8>
<test9/>
</test8>
</test7>
</test6>
</test5>
</test4>
</test3>
</test2>
</test1>
</test0>
</Satellite>
没有标签或没有空格。
我设置了缩进号,因为java可能存在错误,我激活了OutputKeys.INDENT。
还有其他想法吗?
编辑1(在adarshr修复之后):
我现在有空格。只有第一个卫星入口位于第一行,不应该是。
<?xml version="1.0" encoding="UTF-8"?><Satellite SatelliteName="" XmlFileVersion="">
<test0>
<test1>
<test2>
<test3>
<test4>
<test5>
<test6>
<test7>
<test8>
<test9>blah</test9>
</test8>
</test7>
</test6>
</test5>
</test4>
</test3>
</test2>
</test1>
</test0>
<sdjklhewlkr/>
</Satellite>
编辑2:
所以当前的状态是我现在有空格但我在XML声明后没有换行符。我该如何解决这个问题?
答案 0 :(得分:4)
尝试设置缩进量,如下所示:
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
答案 1 :(得分:2)
我玩过Transformer,但从来没有让它工作过。我使用了Xerces(Apache)库,它对我来说一直很有魅力。尝试像
这样的东西OutputFormat format = new OutputFormat(document);
format.setLineWidth(65);
format.setIndenting(true);
format.setIndent(2);
Writer outxml = new FileWriter(new File("out.xml"));
XMLSerializer serializer = new XMLSerializer(outxml, format);
serializer.serialize(document);
答案 2 :(得分:1)
我曾经遇到过同样的问题。问题是加载的TransformerFactory或Transformer类的实现与Java的意图不同。
还有一个我们必须设置的系统属性才能解决它。我会尽力为你解决这个问题。
编辑:试试这个
System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.xsltc.trax.TransformerFactoryImpl");
答案 3 :(得分:0)
我可以给你2条建议
<强>第一强> 您可以使用xsl文件进行漂亮的输出
<强>第二强> 我找到了有趣的库ode-utils-XXX.jar
你可以像
一样写作String result = "";
try {
result = DOMUtils.prettyPrint(doc);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(result);