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

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

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

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
25 апр. 2024, в 12:23
2500 руб./за проект
25 апр. 2024, в 12:21
10000 руб./за проект