I am using StAX XML stream writer to write the XML file. It writes all the data in a single line. I want all the tags to be indented instead of a single line.
Formatting XML file using StAX
Duplicate of https://mcmap.net/q/109900/-stax-xml-formatting-in-java –
Eclair
@skaffman: From that I am not able to understand how to set the indent parmeter and where I can pass my xml file name. –
Magill
stax-utils provides class IndentingXMLStreamWriter
which does the job:
XMLStreamWriter writer =
XMLOutputFactory.newInstance().createXMLStreamWriter(...);
writer = new IndentingXMLStreamWriter(writer);
...
can you please name the jar file. I am not getting the download option at the given site. –
Magill
@Magill - stax-utils.dev.java.net/files/documents/1519/50947/… –
Instrumentalist
@Chris i tried this with spring batch. I get the xml in proper format, but when i deploy this to weblogic and run the batch job, i see "
" inserted at the end of each line. How to avoid this? –
Overarch
@Maverick: Not sure... You may want to try StAXON instead, which has a similar class (
de.odysseus.staxon.xml.util.PrettyXMLStreamWriter
). –
Instrumentalist Answered here: StAX XML formatting in Java
EDIT: A quick example (without resource cleaning) using 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());
This gives you:
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b></b>
</a>
I did check that, can you give some example having the code snippet to pass my xml file and set the indent option. In the example provided at the above location, I am not able to understand how to set all this params. –
Magill
I added an example to the post. –
Alexisaley
Example pretty printing OMElement (Axiom library) via 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();
}
© 2022 - 2024 — McMap. All rights reserved.