![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Sergey89 |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
Суть проблемы в том, что пустые узлы не рассериализовать. Натыкаемся на предупреждение:
Одно решение я нашёл:
Но может есть что-то более изящное? --------------------
mlib.com.ru |
||||||||||
|
|||||||||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
Нет - изящного выхода отсюда нету.
Может быть имеет смысл пересмотреть структуру xml, может-быть сделать child3 атрибутом, если он имеет какой-то смысл. А если не имеет, то зачем его хранить? можно добавить когда потребуется. |
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
WolfON, имеется уже готовый XML файл. Хочется всячески исключить правку самого файла, т.к. он находится в ZIP архиве.
--------------------
mlib.com.ru |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
Тогда обойдитесь без сериализации а сохраняйте все в xml.
Что мешает? |
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
WolfON, этот XML файл разбирается скриптом и результат записывается в массив. Чтобы повторно не разбирать XML, сделано кэширование массива через серриализацию.
--------------------
mlib.com.ru |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
ну тогда остается только ваш первый вариант
|
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
Пришла в голову ещё одна идея
--------------------
mlib.com.ru |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Я б написал класс, который создает точно такую структуру, а потом серелезирувал
|
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
Diesel Draft, предлагаешь велосипед изобрести и написать программную реализацию SimpleXML? Хотя можно с наследованием от SimpleXML чё-нить замутить.
--------------------
mlib.com.ru |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
Уффф... я вот не понимаю - вам нужно уменьшение нагрузки или что?
Решение с циклом самое быстрое. |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Sergey89, Насчет наследования. Я пишу объект который наследует SimpleXML. Но припустим на сервере нет SimpleXML тогда я заменяю класс, не меняя имени на другой. Этот класс умеет все то самое, но реализован на РНР
|
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
Отвлекитесь от кэширования и всего прочего. Я сейчас поставил вопрос конкретно о проблеме серриализации SimpleXML объекта. Но вот решение c str_replace всёравно быстрее. Хостинг без поддержки SimpleXML - недохостинг. PHP 4 сдыхает, а на PHP 5 перешёл любой дорожащий клиентами хостер. Но это так... лирическое отступление. --------------------
mlib.com.ru |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
XML у которого имеют смысл пустые элементы - недоxml ![]() ну честно - грамотное использование технологии решит проблему сейчас и не возникнет много проблем в дальнейшем. |
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
WolfON, ну не совсем. Логично, конечно, будет писать <child2 />, но <child2></child2> также имеет право на жизнь.
--------------------
mlib.com.ru |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Sergey89, что тема уже решена?
|
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
С наследованием от SimpleXMLElemtnt ничего не вышло, т.к. конструктор базового класса объявлен как final. ЗЫ мне кажется, или heredoc ситнаксис действительно не воспринимается как строка? Это я про подсветку кода. Это сообщение отредактировал(а) Sergey89 - 7.9.2007, 23:15 --------------------
mlib.com.ru |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
кажется - heredoc это по сути обычный комментарий
|
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
Нет. Это именно один из способов определения строки. http://php.net/heredoc
--------------------
mlib.com.ru |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
черт попутал с phpdoc %)
|
|||
|
||||
Endeveit |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 2.6.2006 Репутация: 1 Всего: 7 |
ПХП не поддерживает десериализацию объектов DOM, SimpleXML и некоторых других (подробнее где-то на bugs.php.net)
В принципе возможно вот такое решение:
|
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
Endeveit, проблема немного в другом. Необходимо привести объект типа SimpleXMLElement к типу array и серриализовать именно массив. За код конечно спасибо, сохраню для себя его.
--------------------
mlib.com.ru |
|||
|
||||
Endeveit |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 2.6.2006 Репутация: 1 Всего: 7 |
Как я уже написал выше, ПХП в любом случае не поддерживает десериализацию объектов DOM, SimpleXML.
P.S. Если честно, не совсем понятна идея с сериализацией именно массива, мое предыдущее решение много лучше и красивее, имхо. Это сообщение отредактировал(а) Endeveit - 8.9.2007, 22:21 |
|||
|
||||
Endeveit |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 2.6.2006 Репутация: 1 Всего: 7 |
Но есть еще решение - руками вызывать метод, который будет приводит объект к массиву нужного вида и руками же делать обратное преобразование.
Как-то так, например:
|
|||
|
||||
Sergey89 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 14.9.2004 Репутация: нет Всего: нет |
А это тоже самое что я уже написал. Только в виде отдельной функции.
Это сообщение отредактировал(а) Sergey89 - 8.9.2007, 22:41 --------------------
mlib.com.ru |
|||
|
||||
Endeveit |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 2.6.2006 Репутация: 1 Всего: 7 |
Ну, тогда только такое решение.
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |