Java中的StAX XML格式

Leh*_*ane 22 java xml formatting stax woodstox

是否可以使用StAX(特别是woodstox)使用换行符和制表符格式化输出xml,即以下列形式:

<element1>
  <element2>
   someData
  </element2>
</element1>

代替:

<element1><element2>someData</element2></element1>

如果在woodstox中无法做到这一点,是否有其他轻量级库可以做到这一点?

Juh*_*älä 23

有com.sun.xml.txw2.output.IndentingXMLStreamWriter

XMLOutputFactory xmlof = XMLOutputFactory.newInstance();
XMLStreamWriter writer = new IndentingXMLStreamWriter(xmlof.createXMLStreamWriter(out));
Run Code Online (Sandbox Code Playgroud)


Jos*_*osh 8

通过JDK : transformer.setOutputProperty(OutputKeys.INDENT, "yes");.

  • @Josh链接坏了.在SO上提出了这种方法:[使用StAX格式化XML文件](http://stackoverflow.com/questions/2949203/formatting-xml-file-using-stax/2952945#2952945) (3认同)
  • 那不是答案。什么变压器?如何使用它? (2认同)

And*_*wan 6

如果您正在使用StAX游标API,则可以通过将XMLStreamWriter包装在缩进代理中来缩进输出.我在自己的项目中试过这个并且效果很好.


Rol*_*and 5

使用JDK Transformer

public String transform(String xml) throws XMLStreamException, TransformerException
{
    Transformer t = TransformerFactory.newInstance().newTransformer();
    t.setOutputProperty(OutputKeys.INDENT, "yes");
    t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
    Writer out = new StringWriter();
    t.transform(new StreamSource(new StringReader(xml)), new StreamResult(out));
    return out.toString();
}
Run Code Online (Sandbox Code Playgroud)