Разбор xml в php

evshi

Новичок
Разбор xml в php

Первый раз сталкиваюсь с обработкой xml, так что заранее прошу прощения за возможно глупые вопросы.

Пытаюсь добавить xml код в переменную для дальнейшего разбора:

PHP:
$xmlstr = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<ymaps:ymaps xmlns="http://maps.yandex.ru/ymaps/1.x">
  <ymaps:GeoObjectCollection>
    <gml:metaDataProperty xmlns="http://www.opengis.net/gml">
      <ygeo:GeocoderResponseMetaData xmlns="http://maps.yandex.ru/geocoder/1.x">
        <ygeo:request>несуществующая улица</ygeo:request>
        <ygeo:found>0</ygeo:found>
      </ygeo:GeocoderResponseMetaData>
    </gml:metaDataProperty>
  </ymaps:GeoObjectCollection>
</ymaps:ymaps>
XML;

$xml = new SimpleXMLElement($xmlstr);
При выполнении выдается куча ошибок вида

Warning: SimpleXMLElement::__construct() [function.--construct]: namespace error : Namespace prefix ymaps on ymaps is not defined in z:\home\mysiteq.ru\www\test\XML\test.php on line 18

Warning: SimpleXMLElement::__construct() [function.--construct]: <ymaps:ymaps xmlns="http://maps.yandex.ru/ymaps/1.x"> in z:\home\mysiteq.ru\www\test\XML\test.php on line 18

Warning: SimpleXMLElement::__construct() [function.--construct]: ^ in z:\home\mysiteq.ru\www\test\XML\test.php on line 18

Судя из ошибки не описаны какие-то имена. Что это за имена и как их описать?
 

lart

Guest
Насколько я помню то в XML нельзя использовать именя с двоеточиями ymaps:ymaps это яндекс положил на это правило
 

Urville

Новичок
Re: Разбор xml в php

Я могу ошибаться, но кажется проблема в том, что ты используешь пространство имен до того его определения.
Например, если их определить чуть раньше - все работает:

PHP:
$xmlstr = <<<XML
<?xml version="1.0" encoding="windows-1251"?>
<map xmlns:ymaps="http://maps.yandex.ru/ymaps/1.x" 
          xmlns:gml="http://www.opengis.net/gml"  
          xmlns:ygeo="http://maps.yandex.ru/geocoder/1.x">
    <ymaps:ymaps>
      <ymaps:GeoObjectCollection>
        <gml:metaDataProperty>
          <ygeo:GeocoderResponseMetaData>
            <ygeo:request>несуществующая улица</ygeo:request>
            <ygeo:found>0</ygeo:found>
          </ygeo:GeocoderResponseMetaData>
        </gml:metaDataProperty>
      </ymaps:GeoObjectCollection>
    </ymaps:ymaps>
</map>
XML;
 

evshi

Новичок
Действительно, если определить их раньше, данных ошибок нет.

Но как быть с обработкой узлов документа, ведь там в названиях встречаются ":" и я получаю
Parse error: syntax error, unexpected ':', expecting ',' or ';' in...

?
 

iceman

говнокодер
> Parse error: syntax error, unexpected ':', expecting ',' or ';' in...

evshi
это не ошибка парсинга XML это ошибка ПХП
 

evshi

Новичок
Я это понимаю, только не знаю, как исправить. Как обращаться к значениям xml узлов, если в именах встречаются везде ":"?

Я же не могу написать echo $xml->ygeo:GeocoderResponseMetaData->ygeo:request; - ошибка возникает теперь здесь.
 
Сверху