2010-06-01 3 views
4

Я использую StAX XML stream writer для записи XML-файла. Он записывает все данные в одну строку. Я хочу, чтобы все теги были отступом, а не одной строкой.Форматирование XML-файла с помощью StAX

+0

Дубликат http://stackoverflow.com/questions/290326/stax-xml-formatting-in-java – skaffman

+2

@skaffman: Из что я не могу понять, как установить палитру отступа и где я могу передать свое имя файла xml. – Anurag

ответ

4

Ответил здесь: StAX XML formatting in Java

EDIT: Быстрый пример (без очистки ресурсов) с использованием Stax-Drivers (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

+0

Я добавил пример сообщения. –

+0

Спасибо, это действительно полезно – Anurag

8

stax-utils обеспечивает класс IndentingXMLStreamWriter, который делает работу:

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

Не могли бы вы назвать файл jar. Я не получаю возможность загрузки на данном сайте. – Anurag

+0

@Anurag - https://stax-utils.dev.java.net/files/documents/1519/50947/stax-utils-20070216.zip – chris

+0

@Chris Я пробовал это с весенней периодичностью. Я получаю xml в правильном формате, но когда я развертываю это в weblogic и запускаю пакетное задание, я вижу « », вставленный в конце каждой строки. Как этого избежать? –

1

Пример довольно печати OMElement (Аксиома библиотека) с помощью StAX:

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

Спасибо! Очень полезно :) –

Смежные вопросы