【问题标题】:java DOM xml file create - Have no tabs or whitespaces in output filejava DOM xml文件创建-输出文件中没有制表符或空格
【发布时间】:2011-07-05 18:50:31
【问题描述】:

我已经浏览了 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 修复之后):

我现在有空格。只有第一个 Satellite Entry 放在不应该放在的第一行。

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

【问题讨论】:

  • 我认为您遇到了第一行问题,在我做过的任何解析/格式化中,xml 编码标签似乎都没有被视为真正的节点,所以它看起来就像你的。

标签: java xml dom indentation


【解决方案1】:

尝试像这样设置缩进量:

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

【讨论】:

  • 我得到了和以前一样的输出。
  • @fpdragon - 您是否包含外部 xalan impl?我建议尝试使用 jdk 内置实现。
  • 我在没有 xalan 的情况下尝试过,但它引发了异常。在此之后我注意到 apache url 在命令中所以我希望这个命令只适用于 xalan?!
【解决方案2】:

我玩过变形金刚,但从来没有成功过。我使用了 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);

【讨论】:

    【解决方案3】:

    我曾经遇到过同样的问题。问题是所加载的 TransformerFactory 或 Transformer 类的实现与 Java 的预期不同。

    为了解决这个问题,我们还必须设置一个系统属性。稍后我会尝试为您获取。

    编辑:试试这个

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

    【讨论】:

    • 更改后出现以下异常:线程“AWT-EventQueue-0”中的异常 javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.xsltc.trax.TransformerFactoryImpl not found
    • 显然,您需要在类路径中有 Apache Xalan JAR 文件! xml.apache.org/xalan-j
    • 嗯,所以没有开箱即用的解决方案?
    • 好的,试过了,除了一件小事,它可以工作。请参见上文。
    • 这很好,但也有点麻烦。我会看看能不能为你找到解决办法。
    【解决方案4】:

    我可以给你 2 条建议

    第一 您可以使用 xsl 文件获得漂亮的输出

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

    你可以像这样写

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 2014-09-14
      • 2017-07-31
      • 2019-11-05
      • 2017-10-13
      相关资源
      最近更新 更多