Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing XML on Android

Given an instance of org.w3c.dom.Document, how do I save its contents to a file/stream?

like image 453
Marek Stój Avatar asked Feb 18 '10 18:02

Marek Stój


2 Answers

You can write xml like all others text files. For parsing Document to string I used:

public static String getStringFromNode(Node root) throws IOException {          StringBuilder result = new StringBuilder();          if (root.getNodeType() == 3)             result.append(root.getNodeValue());         else {             if (root.getNodeType() != 9) {                 StringBuffer attrs = new StringBuffer();                 for (int k = 0; k < root.getAttributes().getLength(); ++k) {                     attrs.append(" ").append(                             root.getAttributes().item(k).getNodeName()).append(                             "=\"").append(                             root.getAttributes().item(k).getNodeValue())                             .append("\" ");                 }                 result.append("<").append(root.getNodeName()).append(" ")                         .append(attrs).append(">");             } else {                 result.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");             }              NodeList nodes = root.getChildNodes();             for (int i = 0, j = nodes.getLength(); i < j; i++) {                 Node node = nodes.item(i);                 result.append(getStringFromNode(node));             }              if (root.getNodeType() != 9) {                 result.append("</").append(root.getNodeName()).append(">");             }         }         return result.toString();     } 

But there is one more simple way to do this: http://www.ibm.com/developerworks/opensource/library/x-android/index.html#list11

private String writeXml(List<Message> messages){     XmlSerializer serializer = Xml.newSerializer();     StringWriter writer = new StringWriter();     try {         serializer.setOutput(writer);         serializer.startDocument("UTF-8", true);         serializer.startTag("", "messages");         serializer.attribute("", "number", String.valueOf(messages.size()));         for (Message msg: messages){             serializer.startTag("", "message");             serializer.attribute("", "date", msg.getDate());             serializer.startTag("", "title");             serializer.text(msg.getTitle());             serializer.endTag("", "title");             serializer.startTag("", "url");             serializer.text(msg.getLink().toExternalForm());             serializer.endTag("", "url");             serializer.startTag("", "body");             serializer.text(msg.getDescription());             serializer.endTag("", "body");             serializer.endTag("", "message");         }         serializer.endTag("", "messages");         serializer.endDocument();         return writer.toString();     } catch (Exception e) {         throw new RuntimeException(e);     }  } 
like image 114
Dmytro Avatar answered Oct 19 '22 14:10

Dmytro


There is a very lightweight framework for reading and writing XML from annotated Java objects. It is fully compatible with Android.

http://simple.sourceforge.net

like image 32
ng. Avatar answered Oct 19 '22 15:10

ng.