How to indent XML properly using XMLSerializer?
I'm having a hard time trying to indent XML files using XMLSerializer
.
I've tried
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output",
true);
I've tried to append \n
into FileWriter
but the output is the \n
's and \t
's at the beginning of the file and not in the right place. I've tried setPropery
with the proper URI etc.
Part of the code:
XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
parserFactory .setNamespaceAware(true);
XmlSerializer serializer = parserFactory .newSerializer();
File xmlFile = new File(PATH + ".xml");
FileWriter writer = new FileWriter(xmlFile);
serializer.setOutput(writer);
//serializer.setProperty(INDENT_URL, INDENT);
serializer.startDocument("UTF-8", null);
//serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output",
开发者_高级运维 true);
serializer.startTag(null, "bla");
writer.append('\n');
What am I missing?
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
worked now.
I dont know if i was putting it before serializer.startDocument(encoding, standalone)
or there was a error with stuff not related to the .xml creation!
Thanks guys!
Have you tried using these two properties "in combination" on Serializer?
// indentation as 3 spaces
serializer.setProperty(
"http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " ");
// also set the line separator
serializer.setProperty(
"http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n");
This is a solution in Java, andriod does support transformer so this should work.
// import additional packages
import java.io.*;
// import DOM related classes
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
// write the output file
try {
// create a transformer
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
// set some options on the transformer
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
// get a transformer and supporting classes
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
DOMSource source = new DOMSource(xmlDoc);
// transform the xml document into a string
transformer.transform(source, result);
// open the output file
FileWriter outputWriter = new FileWriter(outputFile);
outputWriter.write(writer.toString());
outputWriter.close();
} catch(javax.xml.transform.TransformerException e) {
// do something with this error
}catch (java.io.IOException ex) {
// do something with this error
}
I just wanted to make a note that Transformer.setOutputProperties(Properties)
doesn't seems to work for me (1.6.0_26_b03), but Transformer.setOutputProperty(String,String)
does perfectly.
If you have a Properties object, you might have to iterate and individually set the output property for it to work.
精彩评论