Сложности в работе с классом XMLReader (XML -> Excel)

Ответить
Аватара пользователя
Artem-Samsung

Сложности в работе с классом XMLReader (XML -> Excel)

Сообщение Artem-Samsung »

Воспользовался руководством:

http://comp.dmkos.ru/publ/10-1-0-128






PHP код:

Код: Выделить всё

$reader = new XMLReader();



if (!$reader->open('http://djone.com.ua/market.xml')) {

die('Не удалось открыть файл');

}



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

if (!$reader->isValid()) {

die('Неправильный XML');

}



while ($reader->read()) {

 if (($reader->nodeType == XMLReader::ELEMENT) && ($reader->name == 'Element1')) {

   // считываем атрибуты

   $xmlarr[$idx]['Attr1'] = $reader->getAttribute('Attr1');



   while ($reader->read()) {

     // разбираем вложенные элементы

     if (($reader->nodeType == XMLReader::ELEMENT) && ($reader->name == 'Element11')) {

       while ($reader->read()) {

         if ($reader->nodeType == XMLReader::TEXT) {

           // получаем значение из свойства $reader->value;

           $xmlarr[$idx][$reader->name] = $reader->value;

         }

         elseif (($reader->nodeType == XMLReader::ELEMENT) && ($reader->name == 'Element111')) {

           // еще один вложенный элемент

           while ($reader->read()) {

             if ($reader->nodeType == XMLReader::TEXT) /* и т.д. */ {

               $xmlarr[$idx]['Element11'][$reader->name] = $reader->value;

             }

             elseif (($reader->nodeType == XMLReader::END_ELEMENT) && ($reader->name == 'Element111')) {

               break;

             }

           }

         }

         elseif (($reader->nodeType == XMLReader::END_ELEMENT) && ($reader->name == 'Element11')) {

           break;

         }

       }

     }

     elseif (($reader->nodeType == XMLReader::ELEMENT) && ($reader->name == 'Element12')) {

       while ($reader->read()) {

         if ($reader->nodeType == XMLReader::TEXT) {

           // ... = $reader->value;

         }

         elseif (($reader->nodeType == XMLReader::END_ELEMENT) && ($reader->name == 'Element12')) {

           break;

         }

       }

     }

     elseif (($reader->nodeType == XMLReader::END_ELEMENT) && ($reader->name == 'Element1')) {

       $idx += 1;

       break;

     }

   }

 }

} 








Получаю ошибки:



Код:

Код: Выделить всё

Warning: XMLReader::read() [xmlreader.read]: http://djone.com.ua/market.xml:2: validity error : Validation failed: no DTD found ! in /web/sites/deykun.com/djone/xml.php on line 15
Warning: XMLReader::read() [xmlreader.read]:  in /web/sites/deykun.com/djone/xml.php on line 15
Warning: XMLReader::read() [xmlreader.read]: ^ in /web/sites/deykun.com/djone/xml.php on line 15
Warning: XMLReader::read() [xmlreader.read]: An Error Occured while reading in /web/sites/deykun.com/djone/xml.php on line 15



line 15 - это



Код:

Код: Выделить всё

while ($reader->read()) {

Чтение XML:
http://djone.com.ua/market.xml


Выполнение скрипта:
http://deykun.com/djone/xml.php
Аватара пользователя
Sham

Re: Сложности в работе с классом XMLReader (XML -> Excel)

Сообщение Sham »

если схемы нет, то зачем валидация? схема - это описание возможных тегов.
Цитата Artem-Samsung:



$reader->setParserProperty(XMLReader::VALIDATE, true);
Сложности в работе с классом XMLReader (XML -> Excel)




в false


Цитата Artem-Samsung:



if (!$reader->isValid()) {

die('Неправильный XML');

}
Сложности в работе с классом XMLReader (XML -> Excel)




это тогда тоже не нужно (имхо)



ну и имена тегов и атрибутов дб реальные (не Element11 и т.д.)...
Аватара пользователя
Artem-Samsung

Re: Сложности в работе с классом XMLReader (XML -> Excel)

Сообщение Artem-Samsung »

Теперь выдает

Неправильный XML



И массив $xmlarr пуст Изображение
Аватара пользователя
Artem-Samsung

Re: Сложности в работе с классом XMLReader (XML -> Excel)

Сообщение Artem-Samsung »

Цитата Artem-Samsung:



Теперь выдает

Неправильный XML
Сложности в работе с классом XMLReader (XML -> Excel)




небось этот код
Цитата Artem-Samsung:



if (!$reader->isValid()) {

die('Неправильный XML');

}
Сложности в работе с классом XMLReader (XML -> Excel)




срабатывает... (который я предложил удалить/закоментить, ибо он проверяет валидацию)
Аватара пользователя
Artem-Samsung

Re: Сложности в работе с классом XMLReader (XML -> Excel)

Сообщение Artem-Samsung »

да-да. он самый.

но тем не мение, это как бы не влияет на тот цикл, а он похоже не работает Изображение
Аватара пользователя
Artem-Samsung

Re: Сложности в работе с классом XMLReader (XML -> Excel)

Сообщение Artem-Samsung »

код заточен под определенный xml файл (с тегами Element1, Element11 и т.д.). подразумевается, что поменяете на свои, и структура другая...



тут
в комментах предлагаются более универсальные решения (также в комментах к другим методам этого класса).



в любом случае нужно затачивать под свой формат xml-файла.
Аватара пользователя
Artem-Samsung

Re: Сложности в работе с классом XMLReader (XML -> Excel)

Сообщение Artem-Samsung »

Вообщем что мне нужно было?

Есть файл XML со всеми ценами, моделями и ссылками Интернет магазина.

Нужно было создать файл Excel, который бы все это помещал в поля.



Настройка скрипта
[решено] Внедрение PEAR::Spreadsheet_Excel_Writer




Файл xml с такой структурой:





Код:

Код: Выделить всё

Vestax CDX 05
4424
433.7
560
http://djone.com.ua/CD-proigryvateli/1/CDX_05.htm
Vestax

−

Vestax CDR 07
7054.7
691.6
893
http://djone.com.ua/CD-proigryvateli/2/CDR_07.htm
Vestax

Скрипт создания Excel Файла:





PHP код:




Надеюсь кому то поможет.
Вложения

[Расширение jpg было запрещено, вложение больше недоступно.]

Ответить

Вернуться в «Вебмастеру»