Результат цей сервіс повертає в XML форматі.
<?xml version="1.0"?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:maps"
xsi:schemaLocation="urn:yahoo:maps http://api.local.yahoo.com/MapsService/V1/GeocodeResponse.xsd">
<Result precision="zip">
<Latitude>50.441380</Latitude>
<Longitude>30.522495</Longitude>
<Address></Address>
<City>Kiev</City>
<State>Ukraine</State>
<Zip></Zip>
<Country>UA</Country>
</Result>
</ResultSet>
Щоб дістати значення Latitude і Longitude використаємо XPath. Так як в xml вказаний namespace, то потрібно врахувати це при створені документуDocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); //вмикаємо підтримку namespace
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(inputStream);
а також при написанні xpath запиту - хоч в самому xml документі перфікс дефолтового namespace не вказується для тегів, при написанні xpath запитів їх потрібно вкзувати. В нашому випадку превіксом являється urn:yahoo:maps. Таким чином запит для отримання значення Latitude буде мати вигляд//urn:yahoo:maps:Result/urn:yahoo:maps:Latitude
Часом в результаті може бути кілька записів, наприклад в різних країнах можуть бути міста з однаковою назвою. В такому випадку до запиту можна добавити фільтр який буде вибирати тільки результати з України//urn:yahoo:maps:Result/urn:yahoo:maps:Latitude[following-sibling::urn:yahoo:maps:State='Ukraine']
No comments:
Post a Comment