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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml_parse_into_struct 
:(
    Опции темы
Gold Dragon
Дата 21.12.2005, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Ни как не пойму почему xml_parse_into_struct в PHP4 и PHP5 работает по разному? Вернее не работает в PHP5

вот упрощённый код
Код

<?php

$info = '<kabak>
        <id>0</id>
        <name>Неизвестно</name>
        <adress>
                <sity>Неизвестно</sity>
                <area>Неизвестно</area>
                <street>Неизвестно</street>
                <house>0</house>
                <tel>000-000</tel>
                <tel>000-000</tel>
                <email>[email protected]</email>
                <site>www.site.ru</site>
                <parking>Неизвестно</parking>
                <passage>
                        <type>Автобус</type>
                        <nn>0</nn>
                        <stop>Неизвестно</stop>
                </passage>
                <passage>
                        <type>Троллейбус</type>
                        <nn>0</nn>
                        <stop>Неизвестно</stop>
                </passage>
                <passage>
                        <type>Трамвай</type>
                        <nn>0</nn>
                        <stop>Неизвестно</stop>
                </passage>
                <passage>
                        <type>Метро</type>
                        <nn>0</nn>
                        <stop>Неизвестно</stop>
                </passage>
                <ps>Пояснений к адресу нет</ps>
        </adress>
        <service>
                <smoke>Неизвестно</smoke>
                <music>Неизвестно</music>
                <check>Неизвестно</check>
                <biznes />
                <emany />
                <billiard />
                <bouling />
                <casino />
                <games />
                <karaoke />
                <disko />
                <zakaz />
                <kalyan />
                <kondiz />
                <bar />
                <ws />
        </service>
</kabak>';

$p = xml_parser_create();
xml_parse_into_struct($p, $info, $vals);
xml_parser_free($p);
print_r($vals);

?>




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 21.12.2005, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



В чем выражается это "не работает"?

PM ICQ   Вверх
Gold Dragon
Дата 21.12.2005, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



В 4-м выдаёт весь перечень, в 5-м всё пусто (почти)


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 21.12.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Странно.
PM ICQ   Вверх
Gold Dragon
Дата 21.12.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



сам знаю что странно. Вот результат в 5-м

Array ( [0] => Array ( [tag] => KABAK [type] => open [level] => 1 [value] => ) [1] => Array ( [tag] => ID [type] => complete [level] => 2 [value] => 0 ) [2] => Array ( [tag] => KABAK [value] => [type] => cdata [level] => 1 ) [3] => Array ( [tag] => NAME [type] => open [level] => 2 ) )

Само сабой что данных должно быть нааамного больше


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 22.12.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Ещё будут у кого какие мысли? Попобуйте код, может у кого по другому работает


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 30.12.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Red Dragon, ИМХО в PHP 5 нужно использовать DOM или SimpleXML.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Gold Dragon
Дата 30.12.2005, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



IZ@TOP
да вот переписываю код... но почему этот не работает? в документации вроде 5-й поддерживает


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 10.1.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Gold Dragon, на самом деле там у них с разными версиями разные функции по разному работают (это я про чилдренов РНР 5). Возможно есть какие-то глюки. В общем думаю будет оптимальным и более разумным забыть про xml функции и пользоваться DOM/SimpleXml и прочими нововведениями.
Добавлено @ 15:35
Офф: Gold Dragon, а ты разве не Red Dragon?? smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Gold Dragon
Дата 10.1.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



да вот и я так подумал... Попробывал SimpleXml - СУПЕР!!! Вот переписываю код. А вот в 4-м xml_parse_into_struct больше всего мне нравилась


PS
ну так хватит краснеть за всех smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
dipsy
Дата 6.9.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 13.1.2005
Где: Нижний Новгород

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



в первый раз вижу использование xml в php. интересно. всегда мечтал с xml разобраться.
у меня php 4.4.0

в примере тэг kabak один
не понятно вот что:
Код

    [0] => Array
        (
            [tag] => KABAK
            [type] => open
            [level] => 1
            [value] => 
        
        )
    [2] => Array
        (
            [tag] => KABAK
            [value] => 

            [type] => cdata
            [level] => 1
        )

    [3] => Array
        (
            [tag] => KABAK
            [value] =>         
            [type] => cdata
            [level] => 1
        )
     и т.д.

почему в массиве так много kabak-ов оказалось? Сорри, если вопрос глупый.
PM MAIL WWW   Вверх
G0rinich
Дата 29.9.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



xml_parse_into_struct() берет XML и разбирает его в массив. При этом в массив попадают не только все полезные данные, но и информация обо всех встреченных тегах. В полученном массиве хранится дерево. Когда РНР5 только еще зарождался и SimpleXML() использовать просто не стоило, а на хостингах о РНР5 можно было только мечтать мне приходилось разбирать XML данные и вносить их в БД. Размер XML файла был ~ 15Mb, и при этом к БД выполнялось порядка 210000 запросов. 
Для выполнения этой задачи я выбрал xml_parse_into_struct(). Т.к. это казалось самым простым решением. Для того чтобы то, что эта ф-я возвращает, можно было удобно перебрать, я создавал дерево на основе многомерного массива, благо РНР позволяет создавать и работать с такими структурами ). Для создания этого дерева пришлось написать не тривиальную рекурсивную функцию. В итоге вся работа занимала аж 300 секунд. Естественно это меня не устраивало, т.к. скрипт на сервере работает порядка 30 сек. (Заодно был замечен один прикол РНР и я больше не передаю в функцию большие массивы по ссылке. По идее передавать массив, в котором хранится порядка 14мб по ссылке должно было ускорить процесс, но на самом деле только сильно его тормозило (рекурсия срабатывала порядка 200000 раз). Получая доступ к массиву как к глобальной переменной сократило время выполнения почти в 10! раз. Но и это меня не устраивало.)
В связи с этим пришлось изучать другие способы работы с XML. И используя DOM модель удалось работу скрипта уложить в 15!!! секунд, правда скрипт пришлось максимально облегчить, но и логика его стала гораздо проще.
Так что делайте выводы о целесообразности использования тех или иных инструментов ))).
SimpleXML() удобен, но использовать его оправдано на маленьких файлах, а если файлы большие и нужна скорость, то лучше с ними работать руками.

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


 




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


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

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