2010-06-01 193 views
4

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

+0

http://stackoverflow.com/questions/290326/stax-xml-formatting-in-java – skaffman 2010-06-01 11:12:33

+2

@skaffman的重复:从我无法理解如何设置缩进参数以及我可以传递我的XML文件名的位置。 – Anurag 2010-06-01 12:20:03

回答

4

在这里找到答案:StAX XML formatting in Java

编辑:用一个简单的例子(没有资源清洗)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()); 

这给了你:

<?xml version="1.0" encoding="UTF-8"?> 
<a> 
    <b></b> 
</a> 
+0

我没有检查,你可以给一些例子有代码片段来传递我的XML文件并设置缩进选项。在上述位置提供的示例中,我无法理解如何设置所有这些参数。 – Anurag 2010-06-01 12:00:03

+0

我在帖子中添加了一个示例。 – 2010-06-01 12:49:08

+0

谢谢,这真的很有帮助 – Anurag 2010-06-02 16:52:01

8

stax-utils提供IndentingXMLStreamWriter这个工作:

经由StAX的
XMLStreamWriter writer = 
    XMLOutputFactory.newInstance().createXMLStreamWriter(...); 
writer = new IndentingXMLStreamWriter(writer); 
... 
+0

请问您可以为jar文件命名。我没有在给定的网站上获得下载选项。 – Anurag 2010-06-02 10:39:15

+0

@Auurag - https://stax-utils.dev.java.net/files/documents/1519/50947/stax-utils-20070216.zip – chris 2010-06-03 12:21:52

+0

@Chris我试着用spring批处理。我以适当的格式获取xml,但是当我将其部署到weblogic并运行批处理作业时,我在每行末尾插入了“ ”。如何避免这种情况? – 2015-04-23 21:47:48

1

例漂亮的印刷的OMElement(公理库):

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(); 
} 
+0

谢谢!很有帮助 :) – 2012-10-08 08:47:25