开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜