carte java vers XML via XSD


D'abord. Désolé pour le mauvais anglais.
Je veux faire une transformation "commune" de la carte en XML selon XSD donné de cette façon:

  • la clé de la carte sera égale au nom de la balise en XML
  • les noms de balises en XML ne seront pas dupliqués dans différents nœuds (niveaux)
  • la valeur dans la carte peut contenir par exemple une liste de cartes qui représentent des balises répétables dans le nœud
  • le xml créé doit accorder un xsd.
  • etc.

, Donc je suis à la recherche d' une façon compétente de le réaliser.
Est-ce que quelqu'un qui a travaillé avec des tâches similaires et peut m'aider? Tout conseil sera apprécié. Merci à l'avance!

P.S. Exemple.

Map:  
"fname" : "Asdf"   
"lname" : "Fdsa"
"cars"  : "car" {"car1", "car2", "car3"}

XML:    
<fname>Asdf</fname>
<lname>Fdsa</lname>
<cars>
  <car>car1</car>
  <car>car2</car>
  <car>car3</car>
</cars>
Author: A7iz, 2012-03-05

1 answers

Tout d'Abord, vous avez besoin d'un seul élément racine. C'est l'exigence de la syntaxe XML. Maintenant, vous pouvez utiliser JAXB. Définissez vos données de classe:

@XmlType
public class Data {
    private String fname;
    private String lname;
    private Collection<String> cars;

    // getters
    public String getFname() {
        return fname;
    }
    public String getLname() {
        return lname;
    }
    @XmlElementWrapper(name = "cars")
    @XmlElement(name = "car")
    public String getCars() {
        return cars;
    }


    // setters.....
}

Maintenant, vous pouvez créer une instance de cette instance de classe, appeler tous les setters pour remplir les données, puis appeler:

JAXBContext ctx = JAXBContext.newInstance("com.yourpackage");
Marshaller m = ctx.createMarshaller();
m.marshal(data, System.out);

Et vous verrez vos données sérialisées en XML sur STDOUT.

Pour analyser XML en arrière dire:

JAXBContext ctx = JAXBContext.newInstance("com.panpwr.api.model.deployment");
Unmarshaller unmarshaller = ctx.createUnmarshaller();
Data data = (Data)unmarshaller.unmarshal(in); // in is the input stream for XML
// now your instance of data is populated from XML
 1
Author: AlexR, 2012-03-05 13:10:15