vanesxl
@vanesxl

Как правильно получить данные с XML?

Здравствуйте,
пишу программу на Java, мне нужно получить координаты по адресу. Для этого использую геокодер от яндекса.
Делаю запрос по адресу:
https://geocode-maps.yandex.ru/1.x/?geocode=460048,%20Россия,%20Оренбургская%20область,%20г.%20Оренбург,%20ул.Монтажников,%2018

В ответ получаю в виде XML:
<?xml version="1.0" encoding="utf-8"?>
<ymaps xmlns="http://maps.yandex.ru/ymaps/1.x" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="     http://maps.yandex.ru/business/1.x http://maps.yandex.ru/schemas/business/1.x/business.xsd     http://maps.yandex.ru/geocoder/1.x http://maps.yandex.ru/schemas/geocoder/1.x/geocoder.xsd     http://maps.yandex.ru/psearch/1.x http://maps.yandex.ru/schemas/psearch/1.x/psearch.xsd     http://maps.yandex.ru/search/1.x http://maps.yandex.ru/schemas/search/1.x/search.xsd     http://maps.yandex.ru/web/1.x http://maps.yandex.ru/schemas/web/1.x/web.xsd     http://maps.yandex.ru/search/internal/1.x http://maps.yandex.ru/schemas/search/internal/1.x/internal.xsd">
  <GeoObjectCollection>
    <metaDataProperty xmlns="http://www.opengis.net/gml">
      <GeocoderResponseMetaData xmlns="http://maps.yandex.ru/geocoder/1.x">
        <request>460048, Россия, Оренбургская область, г. Оренбург, ул.Монтажников, 18</request>
        <found>1</found>
        <results>10</results>
      </GeocoderResponseMetaData>
    </metaDataProperty>
    <featureMember xmlns="http://www.opengis.net/gml">
      <GeoObject xmlns="http://maps.yandex.ru/ymaps/1.x" xmlns:gml="http://www.opengis.net/gml" gml:id="1">
        <metaDataProperty xmlns="http://www.opengis.net/gml">
          <GeocoderMetaData xmlns="http://maps.yandex.ru/geocoder/1.x">
            <kind>house</kind>
            <text>Россия, Оренбург, улица Монтажников, 18</text>
            <precision>exact</precision>
            <Address xmlns="http://maps.yandex.ru/address/1.x">
              <country_code>RU</country_code>
              <formatted>Оренбург, улица Монтажников, 18</formatted>
              <Component>
                <kind>country</kind>
                <name>Россия</name>
              </Component>
              <Component>
                <kind>province</kind>
                <name>Приволжский федеральный округ</name>
              </Component>
              <Component>
                <kind>province</kind>
                <name>Оренбургская область</name>
              </Component>
              <Component>
                <kind>area</kind>
                <name>городской округ Оренбург</name>
              </Component>
              <Component>
                <kind>locality</kind>
                <name>Оренбург</name>
              </Component>
              <Component>
                <kind>street</kind>
                <name>улица Монтажников</name>
              </Component>
              <Component>
                <kind>house</kind>
                <name>18</name>
              </Component>
            </Address>
            <AddressDetails xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
              <Country>
                <AddressLine>Оренбург, улица Монтажников, 18</AddressLine>
                <CountryNameCode>RU</CountryNameCode>
                <CountryName>Россия</CountryName>
                <AdministrativeArea>
                  <AdministrativeAreaName>Оренбургская область</AdministrativeAreaName>
                  <SubAdministrativeArea>
                    <SubAdministrativeAreaName>городской округ Оренбург</SubAdministrativeAreaName>
                    <Locality>
                      <LocalityName>Оренбург</LocalityName>
                      <Thoroughfare>
                        <ThoroughfareName>улица Монтажников</ThoroughfareName>
                        <Premise>
                          <PremiseNumber>18</PremiseNumber>
                        </Premise>
                      </Thoroughfare>
                    </Locality>
                  </SubAdministrativeArea>
                </AdministrativeArea>
              </Country>
            </AddressDetails>
          </GeocoderMetaData>
        </metaDataProperty>
        <description xmlns="http://www.opengis.net/gml">Оренбург, Россия</description>
        <name xmlns="http://www.opengis.net/gml">улица Монтажников, 18</name>
        <boundedBy xmlns="http://www.opengis.net/gml">
          <Envelope>
            <lowerCorner>55.143272 51.798303</lowerCorner>
            <upperCorner>55.151483 51.803393</upperCorner>
          </Envelope>
        </boundedBy>
        <Point xmlns="http://www.opengis.net/gml">
          <pos>55.147378 51.800848</pos>
        </Point>
      </GeoObject>
    </featureMember>
  </GeoObjectCollection>
</ymaps>

Для парсинга использую пример тут: blog.eqlbin.ru/2011/03/jdom-xml-java.html
Но в примере мало вложенностей, а в ответе яндекса их много.
Как мне быстро получить доступ к значению
GeoObjectCollection -> metaDataProperty -> GeocoderResponseMetaData -> results

Заранее большое спасибо!
  • Вопрос задан
  • 388 просмотров
Пригласить эксперта
Ответы на вопрос 1
lxsmkv
@lxsmkv
Test automation engineer
другой способ, это jaxb unmarshalling (и вы забудете про парсинг xml как про страшный сон :)
возмите схему файл xsd по адресу xmlns="maps.yandex.ru/ymaps/1.x"
из нее через jaxb плагин для эклипс сгенерируйте java классы, и читайте xml с помощью этих классов/методов.
в любом случае рекомендую разобраться с jaxb - пригодится.

Или если хочется попарсить, можно попробовать jsoup библиотеку. Она на мой вкус попроще будет чем jdom
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы