2010-06-01 73 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