使用StAX格式化XML文件

我正在使用StAX XML流编写器来编写XML文件。 它将所有数据写入一行。 我希望所有标签都缩进而不是单行。

stax-utils提供了类IndentingXMLStreamWriter来完成这项工作:

 XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(...); writer = new IndentingXMLStreamWriter(writer); ... 

这里回答: Java中的StAX XML格式

编辑:使用stax-utils( https://stax-utils.dev.java.net/ )的快速示例(无需资源清理):

 XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance(); FileOutputStream file = new FileOutputStream("d:/file.xml"); XMLEventWriter writer = xmlOutputFactory.createXMLEventWriter(file); writer = new IndentingXMLEventWriter(writer); XMLEventFactory eventFactory = XMLEventFactory.newInstance(); writer.add(eventFactory.createStartDocument()); writer.add(eventFactory.createStartElement("", "", "a")); writer.add(eventFactory.createStartElement("", "", "b")); writer.add(eventFactory.createEndElement("", "", "b")); writer.add(eventFactory.createEndElement("", "", "a")); writer.add(eventFactory.createEndDocument()); 

这给你:

     

通过StAX打印OMElement(Axiom库)的示例:

 OMElement mapArg = fac.createOMElement(name, elementNs); mapArg.addAttribute("type", soapXml.getPrefix() + ":Map", xsi); PropertyDescriptor[] properties = PropertyUtils.getPropertyDescriptors(value); for (PropertyDescriptor property : properties) { if (property.getName().equals("class")) continue; try { mapArg.addChild(keyValue(property.getName(), PropertyUtils.getProperty(value, property.getName()))); } catch (Exception e) { } } final StringWriter stringWriter = new StringWriter(); try { IndentingXMLStreamWriter xmlWriter = new IndentingXMLStreamWriter(StaxUtilsXMLOutputFactory.newInstance().createXMLStreamWriter(stringWriter)); mapArg.serialize(xmlWriter); System.out.println(stringWriter.toString()); } catch (XMLStreamException e) { // TODO Auto-generated catch block e.printStackTrace(); }