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>
0
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