// @see http://technojeeves.com/index.php/54-serialize-a-java-collection-with-the-streaming-api
import javax.xml.stream.*;
import java.io.*;
import java.util.*;
public class Map2Xml {
public static void main(String[] args) {
Map m = Map2Xml.createRandomMap();
System.out.println("Starting map:");
System.out.println(m);
// Now write it as xml
try {
Map2Xml.toXml(m, new FileWriter("map2xml.xml"));
}
catch(IOException e) {
e.printStackTrace();
}
catch(XMLStreamException e) {
e.printStackTrace();
}
}
public static Map createRandomMap() {
Map m = new HashMap(5);
for(char i = 'a';i < 'f';i++) {
m.put(String.valueOf(i), (int)(Math.random() * 99));
}
return m;
}
public static void toXml(Map map, Writer out) throws IOException, XMLStreamException {
XMLStreamWriter xsw = null;
try {
try {
XMLOutputFactory xof = XMLOutputFactory.newInstance();
// If you want pretty-printing, you can use:
//xsw = new javanet.staxutils.IndentingXMLStreamWriter(xof.createXMLStreamWriter(out));
xsw = xof.createXMLStreamWriter(out);
//xsw.writeStartDocument("utf-8", "1.0");
xsw.writeStartElement("entries");
// Do the Collection
for(Map.Entry e : map.entrySet()) {
xsw.writeStartElement("entry");
xsw.writeAttribute("key", e.getKey().toString());
xsw.writeAttribute("value", e.getValue().toString());
xsw.writeEndElement();
}
xsw.writeEndElement();
xsw.writeEndDocument();
}
finally {
if (out != null) {
try { out.close() ; } catch(IOException e) { /* ignore */ }
}
}// end inner finally
}
finally {
if (xsw != null) {
try { xsw.close() ; } catch(XMLStreamException e) { /* ignore */ }
}
}
}
}