За последние 24 часа нас посетили 53864 программиста и 1712 роботов. Сейчас ищут 913 программистов ...

Конкретный вопрос по MiniXML

Тема в разделе "Прочие вопросы по PHP", создана пользователем enshtein, 19 апр 2007.

  1. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Только начинаю осваивать XML, а потому несовсем понимаю все же как с ним правильно работать, порыскав по ИНету и почитав пару статей - понял, что MiniXML - это для меня, как для начинающего неплохой выход, однако пока безуспешно бьюсь над такой проблемой:
    Имеется такой вот массив:
    PHP:
    1. $menu = array(
    2.     'Главная' => $url . '/admin/?mod=system',
    3.     'Сайт' => array (
    4.         'Конфигурация сайта' => $url . '/admin/?mod=config&task=config',
    5.         'Файловый менеджер' =>  $url . '/admin/?mod=fileman&task=main',
    6.         'Управление шаблонами' => array (
    7.             'Шаблоны сайта' => $url . '/admin/?mod=templates&task=main&temp=site',
    8.             'Шаблоны админки' => $url . '/admin/?mod=templates&task=main&temp=admin'
    9.         ),
    10.         'Статистика сайта' =>  $url . '/admin/?mod=statist&task=main',
    11.         'Управление пользователями' =>  $url . '/admin/?mod=users&task=main',
    12.         'Резервное копирование' =>  $url . '/admin/?mod=backup&task=main'
    13.     ),
    14.     'Меню' => array (
    15.         'Управление меню' => $url . '/admin/?mod=menu&task=main',
    16.         'Верхнее меню' =>  $url . '/admin/?mod=menu&task=menu_edit&menu_id=0',
    17.         'Главное меню' =>  $url . '/admin/?mod=menu&task=menu_edit&menu_id=1',
    18.         'Нижнее меню' =>  $url . '/admin/?mod=menu&task=menu_edit&menu_id=2'
    19.     ),
    20.     'Контент' => array (
    21.         'Страницы сайта' => $url . '/admin/?mod=content&task=main',
    22.         'Управление блоками' => array (
    23.             'Левые блоки' => $url . '/admin/?mod=blocks&task=main&place=0',
    24.             'Правые блоки' => $url . '/admin/?mod=blocks&task=main&place=1'
    25.         ),
    26.         'Главная страница сайта' =>  $url . '/admin/?mod=mainpage&task=main'
    27.     ),
    28.     'Модули' => array (
    29.         'Каталог девушек' => $url . '/admin/?mod=catalog&task=main',
    30.         'Сообщения на сайте' => $url . '/admin/?mod=messages&task=main'
    31.     ),
    32.     'Установка' => array (
    33.         'Установка шаблонов сайта' => $url . '/admin/?mod=setup&task=site_temp',
    34.         'Установка шаблонов админки' => $url . '/admin/?mod=setup&task=admin_temp',
    35.         'Установка модулей' => $url . '/admin/?mod=setup&task=modules'
    36.     ),
    37.     'О системе' => $url . '/admin/?mod=system&task=about',
    38. );
    Задача состоит в том, чтобы сохранить его в XML-файле, а потом прочитать из XML обратно в такой же массив (т.е. хочу проще говоря хранить структуру меню сайта в XML-формате).
    Плиз, кто знает, если не затруднит напиши как это сделать с применением библиотеки MiniXML. На офф. сайте был, сам пробовал - не получается :(
     
  2. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Наверное вы хотели сказать что задача состоит в том, чтобы сформировать XML документ и сохранить его? В чем проблема то?


    Чем не устраивает пример с офф. сайта (http://minixml.psychogenic.com/overview.html)?
    PHP:
    1.  
    2. <?php
    3. // Use the MiniXML library
    4. require_once('minixml.inc.php');
    5.  
    6.  
    7. /* In this example, these are the part numbers we are interested in. */
    8. $partNumbers = array('DA42', 'D99983FFF', 'ss-839uent');
    9.  
    10. /*  Create a new MiniXMLDoc object.  This document will be your
    11. **  interface to all the XML elements.
    12. */
    13. $xmlDoc = new MiniXMLDoc();
    14.  
    15. /* XML is created in a hierarchical manner, like a tree.  To start
    16. ** creating our request, we need this tree's root.
    17. **
    18. ** NOTICE: That weirdo '=&' is not an ordinary assignment - it's PHP's
    19. **      way of asking that $xmlRoot be a REFERENCE to the Root Element.
    20. **      If you don't use =&, you'll be working on a copy and you'll need
    21. **      to $xmlDoc->setRoot($xmlRoot) when you're done.
    22. **
    23. */
    24.  
    25. $xmlRoot =& $xmlDoc->getRoot();
    26.  
    27. /* I've imagined a fictitious structure for this request but
    28. ** they're usually something like this...
    29. **
    30. ** Let's start by adding a partRateRequest element (as a
    31. ** child of the root element) and then we'll create some
    32. ** children of it's own.
    33. **
    34. ** Again, note the use of the '=&'.  The alternative is to
    35. ** use '=' and the $parent->appendChild($child) but be
    36. ** careful as the append is easy to forget...
    37. */
    38. $rateReq =& $xmlRoot->createChild('partRateRequest');
    39.  
    40.  /* Now we'll create a vendor and a parts list element for the
    41.  ** request and fill those up.
    42.  */
    43.  
    44.  $vendor =& $rateReq->createChild('vendor');
    45.    
    46.    $accessid =& $vendor->createChild('accessid');
    47.    /* Set up a few attributes for this element.
    48.    ** notice that accessid will have attributes but no
    49.    ** content (text or whatever) or children.
    50.    */
    51.    $accessid->attribute('user', 'myusername');
    52.    $accessid->attribute('password', 'mypassword');
    53.  
    54.  /* Now we list the parts we are interested.  This element is
    55.  ** directly under the partRateRequest element.
    56.  */
    57.  $partList =& $rateReq->createChild('partList');
    58.  
    59.  /* Now, we add a <partnum>XXX</partnum> element for
    60.  ** each part in our array.  
    61.  **
    62.  ** Just for fun, here I'm using the createElement/appendChild
    63.  ** method, instead of $partList->createChild()
    64.  */
    65.  for($i=0; $i < count($partNumbers); $i++)
    66.  {
    67.     /* using MiniXMLDoc's createElement to create
    68.     ** an element with no parent
    69.     */
    70.     $aPart = $xmlDoc->createElement('partNum');
    71.    
    72.     /* Set a text value to this element */
    73.     $aPart->text($partNumbers[$i]);
    74.    
    75.     /* Now, don't forget to append this element to a parent
    76.     ** or it will simply dissappear
    77.     */
    78.     $partList->appendChild($aPart);
    79. }
    80.  
    81.  
    82. /* OK, we have our request in the xmlDoc.  To pass it along to the
    83. ** server, we stringify it with:
    84. */
    85.  
    86. $xmlString = $xmlDoc->toString();
    87. ?>
    88.