java DOM xml文件创建 - 输出文件中没有选项卡或空格

时间:2011-02-28 13:33:46

标签: java xml dom indentation

我已经查看了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声明后没有换行符。我该如何解决这个问题?

4 个答案:

答案 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);