java DOM xml文件创建-输出文件中没有制表符或空格

java DOM xml文件创建-输出文件中没有制表符或空格,java,xml,dom,indentation,Java,Xml,Dom,Indentation,我已经查看了stackoverflow上的帖子,但似乎没有任何帮助 以下是我们所拥有的: // write the content into xml file TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setAttribute("indent-number", 2); Transfo

我已经查看了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声明之后没有换行符。我怎样才能解决这个问题?

我以前也遇到过同样的问题。问题在于所加载的TransformerFactory或Transformer类的实现与Java的预期不同

为了解决这个问题,我们还必须设置一个系统属性。我马上给你拿

编辑:试试这个


System.setProperty(“javax.xml.transform.TransformerFactory”、“org.apache.xalan.xsltc.trax.TransformerFactoryImpl”)

尝试如下设置缩进量:

transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

我可以给你两个建议

1st 您可以使用xsl文件进行漂亮的输出

第二名 我发现了有趣的库ode-utils-XXX.jar

你可以这样写

String result = "";
        try {
            result = DOMUtils.prettyPrint(doc);
        } catch (IOException e) {           
            e.printStackTrace();
        }
        System.out.println(result);

我玩过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);

在这次更改之后,我得到了以下异常:线程“AWT-EventQueue-0”javax.xml.transform.TransformerFactoryConfigurationError:Provider org.apache.xalan.xsltc.trax.TransformerFactoryImpl未找到显然,您需要在类路径中包含apache xalan JAR文件!嗯,没有现成的解决方案吗?好的,我试过了,除了一件小事,它还能用。请看上面。这很好,听了也有点麻烦。我会看看是否能为您找到解决方案。我得到的输出与以前相同。@fpdragon-您是否包括外部xalan impl?我建议使用jdk内置实现进行尝试。我在没有xalan的情况下尝试过,但它抛出了一个异常。在这之后,我注意到apache url在命令中,所以我希望这个命令只适用于xalan?!我认为您遇到了第一行问题,在我所做的任何解析/格式化中,xml编码标记似乎都没有被视为真正的节点,所以它看起来和您的一样。