Ich benutze Java und XStream, um eine Google Geocode-Anfrage über http zu parsen. Meine Idee ist, eine Address-Klasse mit allen Geocode-Attribs zu haben (zB lat/long, city, provice/state usw.), aber ich habe Probleme beim Parsing des xml mit xstream.parse Google Geocode mit Xstream
Die Google-Antwort ist ähnlich wie diese:
<?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>
Das zeigt nicht sehr gut, aber das Fleisch des Codes ist in dem AddressDetails-Tag.
Wie auch immer, ich bin neu in Java und XStream, daher ist die API-Terminologie für mich etwas verwirrend. Ich muss nur in der Lage sein, einen Mapper zu schreiben, der all diese Tags (dh CountryName) auf ein Attribut innerhalb meines Address-Objekts abbildet (zB address.country = blah). Das Adressobjekt wird ziemlich einfach sein, hauptsächlich nur Strings für Land Name usw. und schwebt für lat/lang.
Die Dokumentation und das Beispiel zeigen nur ein geradliniges Mapping, bei dem jede XML-Tag direkt dem Attribut mit dem gleichen Namen des Objekts zugeordnet wird. In meinem Fall werden die Tags jedoch anders als die Objektattribute benannt. Ein schneller Punkt in die richtige Richtung ist alles was ich wirklich suche.
+1, XStream funktioniert am besten, wenn Sie mit den Java-Objekten beginnen und das XML bestimmen lassen, das von ihnen generiert werden soll. JAXB ist das Gegenteil, aber könnte Overkill sein. Ich würde wahrscheinlich nur den standardmäßigen XML-XML-DOM-Parser verwenden: schreibe eine Methode, die ihn verwendet, um das XML in eine DOM-Baumdatenstruktur zu zerlegen, und gehe durch den Baum, um die Informationen herauszufiltern, die du brauchst, um ein Adressobjekt zu erstellen. –
JAXB kann mit Objekten oder XML beginnen. In meinem Beitrag erfahren Sie, wie eine MOXy JAXB-Erweiterung verwendet werden kann, um diesen Anwendungsfall einfach abzubilden. –