Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML, Парсинг XML 
:(
    Опции темы
pishka
Дата 13.8.2009, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Подскажите пожалуйста как проверить в скрипте что получили нормальный xml документ?

Код, которым обрабатываю XML вот такого типа  :

Код

<?xml version="1.0" encoding="UTF-8">
    <TAG PARAM1="5434" PARAM2="nasty"/>




Код

$reader = new XMLReader();
   $reader->setRelaxNGSchema($rng_schema);
   $reader->XML($answer);
    while ($reader->read()) {
        if ($reader->name == 'TAG') {
            if ($reader->hasAttributes and $reader->nodeType == XMLReader::ELEMENT) {
                while ($reader->moveToNextAttribute()) {
                    $str = $reader->name;
                    if ($str == 'PARAM1') {
                    $pr = $reader->value;
                }                    
                if ($str == 'PARAM2') {
                        $sr = $reader->value;
                    }                    
                }
            }
        }    
    }
 }


XML на вход подается методом GET. Как мне узнать что я получил XML а не что попало?
PM MAIL   Вверх
icewind
Дата 13.8.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 20



Код

$reader = new XMLReader();
   $reader->setRelaxNGSchema($rng_schema);
   $reader->setParserProperty(XMLReader::VALIDATE, true);
   $reader->XML($answer);
   if( !$reader->isValid() )
   {
       exit('Invalid xml format'); //Для примера
   }
    while ($reader->read()) {
        if ($reader->name == 'TAG') {
            if ($reader->hasAttributes and $reader->nodeType == XMLReader::ELEMENT) {
                while ($reader->moveToNextAttribute()) {
                    $str = $reader->name;
                    if ($str == 'PARAM1') {
                    $pr = $reader->value;
                }                    
                if ($str == 'PARAM2') {
                        $sr = $reader->value;
                    }                    
                }
            }
        }    
    }
 }



--------------------
user posted image
PM MAIL Skype   Вверх
pishka
Дата 13.8.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



icewind
isValid() возвращает ложь постоянно и на верный ХМЛ.
Строка 
Код

$reader->setParserProperty(XMLReader::VALIDATE, true);

вызывает ошибку:
XMLReader::setParserProperty() [function.XMLReader-setParserProperty]: Invalid parser property
PM MAIL   Вверх
icewind
Дата 13.8.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 20



Во первых это 
Код

<?xml version="1.0" encoding="UTF-8">
    <TAG PARAM1="5434" PARAM2="nasty"/>

не валидный xml

Возможно версия ридера не совсем новая... 

Конкретный пример использования можно посмотреть здесь ( пример чтения до первой ошибки )
Если уж читать нужно именно ридером

Это сообщение отредактировал(а) icewind - 13.8.2009, 10:33


--------------------
user posted image
PM MAIL Skype   Вверх
pishka
Дата 13.8.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



icewind
там был... =) не совсем все понял.
Вот щас пробую через схему сделать, но застрял на создании схемы для этого XML.
Да, ХМЛ не совсем валидный, но блин такой какой есть - сервер возвращает вот такую убогость, что тут поделать.

<xs:schema>
 <xs:element name="TAG" type="TAG"/>
 <xsd:attribute name="PARAM1" type="xsd:integer" />
 <xsd:attribute name="PARAM2" type="xsd:string" />
</xs:schema>

не подходит...

Это сообщение отредактировал(а) pishka - 13.8.2009, 10:43
PM MAIL   Вверх
icewind
Дата 13.8.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 20



Схему то можно написать, но не проще ли будет использовать SimpleXML (если, конечно, xml файл приемлимых размеров)? У него и валидацию отдельно проводить не надо ( если объект создался - значит xml подошел ) и доступ к данным довольно удобный.


--------------------
user posted image
PM MAIL Skype   Вверх
pishka
Дата 13.8.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



icewind
можешь пример схемы привести? я первый раз с этим сталкиваюсь... 


PM MAIL   Вверх
icewind
Дата 13.8.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 20



С этой темой придется разобраться отдельно. Есть материалы по составлению схем здесь и статья здесь

в общем виде
Код

<?xml version="1.0" encoding="UTF-8"?>
<grammar  xmlns="http://relaxng.org/ns/structure/1.0">
<start>
   <element name="TAG" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
      <attribute name="PARAM1">
       <data type="integer" />
      </attribute>
   </element>
</start>
</grammar>



--------------------
user posted image
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1812 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.