2009-07-02 12 views
2

Je dois écrire un fichier XML en utilisant java.Le contenu doit être écrit à partir d'une carte.La carte contient des éléments comme clé et leur part de marché en valeur.J'ai besoin de construire un fichier XML avec les deux tags.I utilisera ce XML pour construire un diagramme en utilisant amcharts.Can quelqu'un peut-il aider avec un code existant?XML en utilisant Java

<xml> 
<pie> 
    <slice title="<Map key1>"><Map Value1></slice> 
    <slice title="<Map key2>"><Map Value2></slice> 
    <slice title="<Map key1>"><Map Value3></slice> 
    . 
    . 
    . 
    <slice title="<Map keyn>"><Map Valuen></slice> 
</pie> 

Répondre

2

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.

+0

Fantastique ... Marvellous..voted pour vous – Harish

1

Pour ajouter à la réponse de cadrian: Vous pouvez également utiliser un moteur de template comme FreeMarker. Cela vous permet d'avoir le XML en tant que modèle en dehors de votre code Java et de faire la liaison entre vos objets Java et XML à l'intérieur du modèle.

+0

oui, vous avez raison bien sûr. Ou Velocity. – cadrian

2

Je me méfierais de l'écriture XML directement puisque vous devez vous soucier du codage d'entité.

par exemple. l'écriture de contenu textuel avec <, > ou & génère directement du code XML non valide. La même chose s'applique lorsque vous utilisez Velocity et Freemarker.

Si vous écrivez directement le code XML, assurez-vous que tout le contenu de votre texte est encodé correctement. Vous pouvez le faire en utilisant Apache Commons et .

EDIT: En regardant à nouveau vos exigences XML, XStream peut travailler pour vous. Si vous avez java.util.Map, XStream peut écrire ceci directement. Vous devrez regarder aliasing pour changer les noms de vos éléments, mais peut-être intéressant de regarder.