J'utilise Xtream pour manipuler XML. Tout va bien. Mettre sur des archives XML et d'autres choses. Mais, j'ai un problème:
Exemple: mon XML contient une balise, et à l'intérieur de celui-ci, j'ai quelques balises supplémentaires nommées et progressivement.
Je peux faire 500 tags à l'intérieur de la balise. Et ces commentaires sont de type commentaire. P> Comment puis-je faire pour sérialiser avec le Xstream pour mettre toutes ces balises dans les classes? Je ne fais pas comment faire dans la classe pour recevoir les différents objets. P> Évidemment, je vais en faire cela avec un tableau ou un autre.
Mais je ne sais pas comment je peux faire cela. P> p>
3 Réponses :
Pour ce XML, vous souhaitez probablement avoir une structure de classe comme:
XStream xstream = new XStream(); xstream.alias("comments", Comments.class); xstream.alias("comment", Comment.class); xstream.addImplicitCollection(Comments.class, "comments"); Comments comments = (Comments)xstream.fromXML(xml);
Ooh oui. Merci. Dans ce XML que je pose ici, je le rends manuellement. Le XML est correct. Toutes les tags ferment les étiquettes correctes. Merci de répondre.
@Rob Hruska Je sais que c'est un peu tard, mais comment puis-je spécifier l'emplacement du fichier XML?
@ Twhite1195 Le XML doit être lu à partir d'un fichierInputStream ou de quelque chose.
Si vous traitez avec plusieurs objets, vous pouvez vous attendre à appeler Pour résoudre ce problème, j'ai fait une méthode d'utilité générique afin que je puisse analyser chaque petit objet dans sa propre chaîne, donc je pouvais Exemple des appels: P> fromexml code> (
introuvable code> in) plusieurs fois pour obtenir chaque objet. La méthode ne gère pas comme prévu cependant et a lancé un message d'exception mal formulée si vous faites cela. Alternativement, l'enveloppement de tous les objets d'un objet plus important peut entraîner une utilisation plus de mémoire, puis souhaitée ou à court de mémoire.
frtexml (string) code> méthode et encore échelle de taille. P>
String element = next(in, "</MyObject>");
MyObject o = (MyObject)xstream.fromXML(element);
public static String next(InputStream in, String occurence) throws IOException {
StringBuffer sb = new StringBuffer();
int i;
int pos = 0;
while((i = in.read()) != -1) {
sb.append((char)i);
if(i == occurence.charAt(pos)) {
pos ++;
} else
pos = 0;
if(pos == occurence.length())
return sb.toString();
}
return null;
}
Bien qu'il s'agisse d'un vieux fil, mais voici la version annotée: à lamarshal Vous en avez besoin: P> XStream xStream = new XStream();
xStream.processAnnotations(new Class[] { Comments.class, Comment.class });
Comments comments = (Comments)xStream.fromXML(xml);
Votre XML a l'air un peu désactivé. code> tag doit terminer par
commentaire> code> tag et non
comments> code> tag. Aussi, c'est ce que vous recherchez: Stackoverflow.com/Questtions/3136234/... ?
Cette question est également similaire.