J'utilise Xtream et j'ai un échantillon XML: et je veux mapper sur la classe p> L'idée est donc de cartographier l'attribut d'élément imbriqué à l'objet actuel.
J'ai essayé de trouver tout convertisseur prêt à l'emploi sans succès. Je crois que cela est possible en mettant en œuvre un nouveau convertisseur mais peut être quelqu'un déjà fait cela. Ou il y a une solution que je n'ai pas trouvée. P> Mis à jour: strong> P> L'idée que j'essaie de mettre en œuvre est d'omettre des entités inutiles d'être créées et mappées. Je n'ai pas besoin d'entités téléphoniques et fax, je n'ai besoin que de leurs attributs dans mon modèle. Le schéma XML que j'essaie d'analyser est tiersparté pour moi et je ne peux pas le changer. P> p>
3 Réponses :
voir la section "Attribut aliasing" du tutoriel d'alias Xtream: http: // x- stream.github.io/alias-Tutorial.html . P>
Merci Olaf. J'ai mis à jour la question. Pourrait-il être accompli avec le scénario du tutoriel, je me demande?
Je ne connais pas d'un convertisseur prêt à l'emploi qui le fera, mais il est assez trivial d'écrire un Vous pouvez fixer le convertisseur aux champs correspondants à l'aide d'Annotations P> XStream xs = new XStream();
xs.processAnnotations(Person.class);
Person p = (Person)xs.fromXML(
"<person>\n" +
" <firstname>Joe</firstname>\n" +
" <lastname>Walnes</lastname>\n" +
" <phone value='1234-456' />\n" +
" <fax value='9999-999' />\n" +
"</person>");
System.out.println(p);
// prints fn: Joe, ln: Walnes, p: 1234-456, f: 9999-999
Merci, je vais vérifier. Pas sûr de comprendre comment ça marche là-bas. Peut-être que le manque de convertisseurs de compréhension du tout.
Lorsque Xstream lit XML qui représente une classe de type de haricot, il lit le nom de l'élément pour déterminer quel champ il traitait, puis délégués au convertisseur correspondant. La méthode MODARSHAL CODE> Le convertisseur est transmis un
hierarchicalstreamreader code> qui pointe sur la balise d'ouverture de la (dans ce cas)
téléphone code>. Les convertisseurs de valeur unique normaux fonctionnent sur le contenu du texte de l'élément, mais mon convertisseur personnalisé examine à la place l'attribut nommé
valeur code> - il n'a pas besoin de prendre soin de ce que le nom de l'élément était.
Si vous êtes ouvert à l'utilisation d'une bibliothèque autre que Xtream, ci-dessous est la manière dont vous pouvez tirer parti de l'extension personne forte> p> Le @xmlpath code> dans
@xmlpath code> Annotation vous permet de mapper votre champ / Propriété dans un emplacement dans le document XML par un XPath (voir: http: / /blog.bdoughan.com/2010/07/XPATH-BASED-Mapping.html ). P>
<?xml version="1.0" encoding="UTF-8"?>
<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone value="1234-456"/>
<fax value="9999-999"/>
</person>
Merci beaucoup pour une réponse aussi détaillée. J'ai trouvé Jaxb sur l'enquête sur cette question et @xmlpath était la première chose à laquelle j'étais concernant. Pourriez-vous s'il vous plaît donner une brève explication sur maintenant cela fonctionne, je veux dire, cela nécessite-t-il des éléments supplémentaires à sortir? Les performances et l'efficacité des données sont des exigences les plus fortes pour moi pour l'instant.
@Viktorstolbin - @xmLPath code> est en fait une extension fournie dans la mise en œuvre de Eclipselink Moxy de la spécification JAXB (JSR-222). Moxy prend en charge un sous-ensemble de XPath pouvant être procédé lors de la première étape de la profondeur de la carte unique d'un document XML. C'est un processus très efficace.
Bien taché! J'ai réparé ça. Était juste écrit à partir de zéro.
Pourriez-vous clarifier ce que vous recherchez un peu plus? Vous dites "je n'ai pas besoin d'entités de téléphone et de fax ...", vous ne les avez pas - ce ne sont pas des chaînes dans votre modèle, pas des entités séparées ... Voulez-vous que seuls les deux premiers attributs mappés ou tout les quatres?
Le problème consiste à mapper l'échantillon XML sur le modèle. Sans aucun effort supplémentaire, XStream supposé des éléments XML à interpréter comme des membres modèles de toute façon (même ils sont explicitement omis). Avoir un schéma XML riche que vous aimeriez probablement simplifier le modèle pour échapper aux «détenteurs» redondants de données significatives. Les collections implicites sont bonnes mais pas assez.