Il y a plusieurs façons de le faire en utilisant l'API standard. (Insérez vos propres mises en garde au sujet de verbosité et le modèle d'usine.)
Vous pouvez utiliser le XMLStreamWriter pour encoder les données:
XMLOutputFactory factory = XMLOutputFactory
.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(
stream, "UTF-8");
try {
writer.writeStartDocument("UTF-8", "1.0");
writer.writeStartElement("pie");
for (Entry<String, String> entry : map.entrySet()) {
writer.writeStartElement("slice");
writer.writeAttribute("title", entry.getKey());
writer.writeCharacters(entry.getValue());
writer.writeEndElement();
}
writer.writeEndElement();
writer.writeEndDocument();
} finally {
writer.close();
}
Sinon, vous pouvez construire un DOM document (non recommandé) et émettre que, ou utiliser JAXB liaison aux données marshal/unmarshal (tutorial).
échantillon objet JAXB annoté:
@XmlRootElement(name = "pie")
public class Pie {
@XmlElement(name = "slice")
public List<Slice> slices = new ArrayList<Slice>();
public Pie() {
}
public Pie(Map<String, String> sliceMap) {
for (Map.Entry<String, String> entry : sliceMap
.entrySet()) {
Slice slice = new Slice();
slice.title = entry.getKey();
slice.value = entry.getValue();
slices.add(slice);
}
}
static class Slice {
@XmlAttribute
public String title;
@XmlValue
public String value;
}
}
Code d'essai:
Map<String, String> slices = new HashMap<String, String>();
slices.put("Title 1", "100");
slices.put("Title 2", "200");
Pie pie = new Pie(slices);
JAXB.marshal(pie, System.out);
Il existe une multitude d'API de tiers qui peuvent faire les mêmes emplois et diverses options de création de modèles ont déjà été mentionnés.
Fantastique ... Marvellous..voted pour vous – Harish