J'utilise Java et XStream pour analyser une requête de géocodage google sur http. Mon idée est d'avoir une classe Address avec tous les attributs du géocode (c'est-à-dire lat/long, ville, provice/état, etc.) mais j'ai des problèmes pour analyser le xml avec xstream.analyser google geocode avec xstream
La réponse Google est similaire à ceci:
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://earth.google.com/kml/2.0"><Response>
<name>98 St. Patrick St, Toronto</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>98 St Patrick St, Toronto, ON, Canada</address>
<AddressDetails Accuracy="8" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"> <Country><CountryNameCode>CA</CountryNameCode><CountryName>Canada</CountryName><AdministrativeArea><AdministrativeAreaName>ON</AdministrativeAreaName><Locality><LocalityName>Toronto</LocalityName><Thoroughfare><ThoroughfareName>98 St Patrick St</ThoroughfareName></Thoroughfare><PostalCode><PostalCodeNumber>M5T</PostalCodeNumber></PostalCode></Locality></AdministrativeArea></Country></AddressDetails>
<ExtendedData>
<LatLonBox north="43.6560378" south="43.6497426" east="-79.3864912" west="-79.3927864" />
</ExtendedData>
<Point><coordinates>-79.3896388,43.6528902,0</coordinates></Point>
</Placemark>
</Response></kml>
Cela ne se présente pas très bien, mais la viande du code est dans la balise addressdetails.
Quoi qu'il en soit, je suis nouveau sur Java et XStream, donc la terminologie de l'API est un peu confuse pour moi. Je dois juste être en mesure d'écrire un mappeur qui mappe tous ces tags (ie CountryName) à un attribut dans mon objet Address, (par exemple, address.country = blah) L'objet d'adresse sera assez simple, principalement juste des cordes pour le pays nom etc et flotte pour lat/long.
Les documents et l'exemple montrent juste le mappage direct où chaque balise xml est mappée directement à l'attribut du même nom de l'objet. Dans mon cas cependant, les tags sont nommés différemment de l'objet attr. Un point rapide dans la bonne direction est tout ce que je cherche vraiment.
+1, XStream fonctionne mieux si vous commencez avec les objets Java et laissez-le déterminer le XML à générer à partir d'eux. JAXB est l'inverse, mais pourrait être exagéré. J'utiliserais probablement l'analyseur XML XML DOM standard: écrivez une méthode qui l'utilise pour analyser le XML dans une structure de données d'arborescence DOM, et parcourez l'arborescence pour sélectionner les informations dont vous avez besoin pour créer un objet Address. –
JAXB peut commencer avec des objets ou XML. Voir mon article sur la façon dont une extension MOXy JAXB pourrait être utilisée pour mapper facilement ce cas d'utilisation. –