2011-02-28 69 views
3

我已经浏览了stackoverflow上的帖子,但似乎没有任何帮助。java DOM xml文件创建 - 在输出文件中没有制表符或空格

这里是有:

  // 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

我觉得你被卡住第一线的问题,XML编码标签似乎并没有被当作是我做过的任何解析/格式化一个真正的节点,因此它看起来就像像你的。 – 2011-02-28 16:18:41

回答

1

我以前遇到同样的问题。问题是加载的TransformerFactory或Transformer类的实现与Java打算的不同。

还有一个系统属性,我们必须设置为了解决它。我会尽力在一瞬间为你解决。

编辑:试试这个

System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.xsltc.trax.TransformerFactoryImpl");

+0

在更改之后,我收到以下异常:线程“AWT-EventQueue-0”中的异常javax.xml.transform.TransformerFactoryConfigurationError:Provider org.apache.xalan.xsltc.trax。TransformerFactoryImpl未找到 – fpdragon 2011-02-28 13:50:13

+0

显然,您需要在类路径中包含Apache Xalan JAR文件! http://xml.apache.org/xalan-j/ – adarshr 2011-02-28 13:51:15

+0

嗯所以没有开箱即用的解决方案? – fpdragon 2011-02-28 14:05:05

4

尝试设置缩进量是这样的:

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

你走了!这可能对你来说就像魔术一样,@fpdragon! – adarshr 2011-02-28 14:37:47

+1

我得到和以前一样的输出。 – fpdragon 2011-02-28 15:14:39

+0

@fpdragon - 你是否包含外部xalan impl或不包含?我建议使用jdk内置实现来尝试它。 – jtahlborn 2011-02-28 16:36:28

0

我可以给你2建议

你可以漂亮的o使用xsl文件本安输出

第二 我发现有趣库ODE-utils的-XXX.jar

,您只需编写类似

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

我带变压器玩,但从来没有得到它的工作。我使用了Xerces(阿帕奇)图书馆,这对我来说一直是一种魅力。尝试类似

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