当前位置: 首页 > 面试题库 >

使用xstream解析Google地理编码

齐永昌
2023-03-14
问题内容

我正在使用Java和XStream通过http解析Google地理编码请求。我的想法是拥有一个具有所有地理编码属性(例如纬度/经度,城市,省/州等)的Address类,但是我在使用xstream解析xml时遇到了问题。

Google的回应与此类似:

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

不能很好地显示出来,但是代码的内容在AddressDetails标记中。

无论如何,我是Java和XStream的新手,所以API术语对我来说有点混乱。我只需要能够编写一些映射器将所有这些标签(即CountryName)映射到我的Address对象中的一个属性(即address.country
= blah),该地址对象将非常简单,主要是针对国家/地区的字符串名称等,并以经纬度为单位浮动。

文档和示例仅显示了直接映射,其中每个xml标记直接映射到对象名称相同的属性。但是,在我的情况下,标签的命名与对象attr的命名不同。我真正想要的只是朝着正确方向迈出的第一步。


问题答案:

我在几个项目中都使用过XStream。不幸的是,您的问题并不是XStream真正要解决的问题。您也许可以使用其转换器机制来实现您的近期目标,但是会遇到限制。简而言之,XStream并非旨在将树结构A转换为树结构B
-其目的是将Java域模型转换为某种合理的XML。当您不太在乎所生成的XML的细节时,XStream是一个很好的工具。如果您比Java对象更关心XML,请看一下XMLBeans
- Java很丑陋,但是它非常符合模式。

对于您的项目,我将通过XML bean运行Google
XML架构,生成一些Java,这将为您提供一种更熟练的手动编码转换器的方法。您可以使用原始的DOM树,但是您将拥有类似于myAddress.setStreet(root.getFirstChild()。getAttribute(“
addr1”))))的代码。使用XML
Bean,您可以说出myAddress.setStreet(googleResult.getAddress()。getStreetName();

我会忽略JAXB,因为它试图将接口与实现分离开来会增加不必要的复杂性。Castor也可能是一个不错的工具,但是我已经好几年没有使用它了。

简而言之,没有很多好的对象到对象或XML到对象的转换器可以很好地处理结构转换。在我看到的尝试声明式解决方案的解决方案中,它们似乎都比使用XStream /
XmlBeans以及手工编码的结构转换要复杂得多(并且不再可维护)。



 类似资料:
  • 问题内容: 我有一个充满地址的数据库,我需要获取经纬度,并且需要很长一段时间,因此我想遍历它们并使用Google Geocode更新我的数据库。我对如何解析JSOn结果以获取所需信息感到困惑: 我以为我可以简单地建立一个快速的类,并使用JSON.Net对结果进行反序列化,这是可行的,但是我想在类结构中使用它: 以下是Google返回的示例: 我在这里想念简单,有人吗? 问题答案: 我尝试了一下,做

  • 我正在从谷歌地图上提取一些数据,但我似乎不能用它做任何事情。下面是我的代码: 你知道我做错了什么吗?

  • 问题内容: 我正在尝试将Google Maps地理编码器与Python和JSON结合使用,但一直被告知我有一个错误的请求: 失败。 但是如果我只是复制粘贴 放入浏览器栏中,效果很好。 我的要求出了什么问题? 问题答案: 您需要一些URL引用编码,这可以工作: 行 加法= urllib2.quote(ADD) 是重要的一点。如果您使用的是非拉丁字符,则建议Google API需要UTF-8编码。

  • 问题内容: 这是进入一个位置时可以得到纬度和经度的代码。我相信我的代码是我所知。但是进入一个位置后,我得到了空白页。 这是代码: 问题答案: 您正在尝试在此处使用JSONP。 JSONP 如果URL包含字符串“ callback =?” (或类似,由服务器端API定义),则将request>视为JSONP。有关更多详细信息,请参见$ .ajax()中有关jsonp数据类型的讨论。 重要提示:从jQ

  • 问题内容: 我正在尝试从Google json获取$ street,$ city和$ country字符串。它适用于我的家庭住址:http : //maps.googleapis.com/maps/api/geocode/json?latlng=52.108662,6.307370&sensor=true 但是,对于像这样的示例中数组中包含更多数据的其他地址:http : //maps.googl

  • 功能介绍 地理编码(Geocoding)也称地址匹配,是指将地址映射成地理坐标的过程,提供了一种把描述成文本地址的地理位置信息转换成地理坐标的方式。 地理编码服务实现了将地址或地名描述转换为对应的地理坐标和结构化地址描述的功能。通过address参数传入具体地址信息,通过city参数传递具体访问地址的区域,即可以得到该地址的坐标信息。SuperMap Online的地理编码服务在地址匹配过程中采用