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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите организовать рекурсию, для построения XML 
:(
    Опции темы
flashaa
Дата 31.10.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть такой массив:
Код

Array
(
    [Знакомства] => Array
        (
            [Я ищу] => Array
                (
                    [meet_look_girl] => 1
                )

            [В возрасте от] => Array
                (
                    [meet_age_1] => 1
                )

            [В возрасте до] => Array
                (
                    [meet_age_2] => 1
                )

            [Цель знакомства] => Array
                (
                    [meet_for_friendship] => 1
                )

            [Кого я ищу] => Array
                (
                    [meet_man_text] => 1
                )

        )

)


Необходимо сформировать фрагмент XML -документа вот такого вида:
Код

<head name="Знакомства">
    <chapter name="я ищу">
        <field name="meet_look_girl"/>
    </chapter>
    ... и тд
</head>


Помогите.

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


Новичок



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

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



Цитата(flashaa @ 31.10.2007,  16:42)
Есть такой массив:
Код

Array
(
    [Знакомства] => Array
        (
            [Я ищу] => Array
                (
                    [meet_look_girl] => 1
                )

            [В возрасте от] => Array
                (
                    [meet_age_1] => 1
                )

            [В возрасте до] => Array
                (
                    [meet_age_2] => 1
                )

            [Цель знакомства] => Array
                (
                    [meet_for_friendship] => 1
                )

            [Кого я ищу] => Array
                (
                    [meet_man_text] => 1
                )

        )

)


Необходимо сформировать фрагмент XML -документа вот такого вида:
Код

<head name="Знакомства">
    <chapter name="я ищу">
        <field name="meet_look_girl"/>
    </chapter>
    ... и тд
</head>


Помогите.

Ну насколько я понял, тут все просто. Пробегаемся по циклу и делаем массив из хмл?
PM MAIL   Вверх
flashaa
Дата 5.11.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Код

Array
(
    [Знакомства] => Array ()
);


При этом узел <head name="Знакомства"> не должен быть создан.
PM MAIL   Вверх
Djinn
Дата 5.11.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как вариант если не всё так просто то мог бы и код выложить... интересно всётаки...
PM MAIL   Вверх
flashaa
Дата 5.11.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Задача достаточно обширная... Занимаюсь ей уже довольно давно. Это сайт знакомств.
В данном случае пример того, что я хочу есть на небезызвестном сайте loveplanet.ru

Пользователь заполняет анкету. В анкете есть разделы. Например знакомства, типаж, интересы, и тп.
Каждый такой раздел сам состоит из разделов. 
Например графа "семейное положение" состоит из большого кол-ва чекбоксов, все чекбоксы между собой независимы.

В режиме редактирования отобразить анкету достаточно легко - просто выводим все разделы и все поля.
А если у нас режим просмотра, то тогда надо выводить только ВЫДЕЛЕННЫЕ пользователем разделы.

Сайт имеет шаблонизатор, работающий через XSLT. В скрипте я собираю XML-дерево с данными, дальше "скармливаю" это дерево XSLT-трансформатору, который и выдает мне HTML.

Вот здесь и встала задача о том, чтобы получать различные XML из массивов.
Разочаровываюсь в такой шаблонизации. Склонен перейти к простым PHP-шаблонам, чем по сути и является Smarty, только он имеет много надстроек, которые, имхо, не нужны. Но в данном проекте только так.

Итак решение задачи этой темы.
Cуть в том, что создается XML - фрагмент тупо в виде строки.
Дальше этот фрагмент присоединяется к моему дереву.
Формирование XML фрагмента в виде строки выполняет итеративная часть,
преобразование этой строки в DOMDocument и просоединение к дереву выполняет интерфейсная часть.

Итеративная часть кривая, но работает
Код

/**
 * Итеративная часть
 */
private function iterative(array &$ar) {
        
        static $resultXML = '';
        
        foreach ($ar as $key => $row) {
            
            if(is_array($row)) {
                
                    
                $resultXML .=  '<field name="' . $key . '">';
                $this->iterative($row, $values);
                $resultXML .= '</field>';
                             
            } else {
                
                $resultXML .= "<field name='{$key}'>{$row}</field>";
                
            }
            
            
        }
        
        return $resultXML;
        
    }
    

        /**
         * Интерфейсная часть
         */
    public function parseUnlimitedArray(array $ar, array $nodeNames) {
        
        $frag = $this->dom->createDocumentFragment();
        $frag->appendXML($this->iterative(&$ar, &$nodeNames));
        
        $this->node->appendChild($frag);
        
            
    }




Это сообщение отредактировал(а) flashaa - 5.11.2007, 14:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




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


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

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