将org.w3c.dom.Document打印到stdout的最短路径是什么?

fly*_*ire 96 java xml w3c dom

什么是将org.w3c.dom.Documentstdout 打印(也称为格式化)a的最简单方法?

Boz*_*zho 177

调用printDocument(doc, System.out),该方法如下所示:

public static void printDocument(Document doc, OutputStream out) throws IOException, TransformerException {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

    transformer.transform(new DOMSource(doc), 
         new StreamResult(new OutputStreamWriter(out, "UTF-8")));
}
Run Code Online (Sandbox Code Playgroud)

(这indent-amount是可选的,可能不适用于您的特定配置)

  • 具有讽刺意味的是,这是用Java简单地打印XML文档的"最简单"方法吗? (61认同)
  • 另一方面,你有足够的控制权;) (7认同)
  • 我向上帝Java发誓..让我写一些荒谬的代码行,可以用其他语言中的一两个来完成...同时完全控制... (4认同)
  • 辉煌!是的,它有点多文字,但很明显选择的选项是什么,Eclipse/Netbeans真的可以帮助你写这个.给我看一个较小的版本,我告诉你它不能做什么.更糟糕的是,我会告诉你哪里需要3轮调试才能做到正确... (2认同)

小智 13

怎么样:

OutputFormat format = new OutputFormat(doc);
format.setIndenting(true);
XMLSerializer serializer = new XMLSerializer(System.out, format);
serializer.serialize(doc);
Run Code Online (Sandbox Code Playgroud)

  • 虽然更容易,但这种方法需要Xerces (8认同)
  • 我可以补充一点,今天不推荐使用 XMLSerializer 和 OutputFormat (3认同)

yeg*_*256 10

尝试使用一个衬垫jcabi-xml:

String xml = new XMLDocument(document).toString();
Run Code Online (Sandbox Code Playgroud)

这是您需要的依赖:

<dependency>
  <groupId>com.jcabi</groupId>
  <artifactId>jcabi-xml</artifactId>
  <version>0.14</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)