Перевод XML в массив

Советы и скрипты PHP

Перевод XML в массив

Сообщение ukhov » 19 май 2012, 19:19

XML → Array
Переводит XML-данные в массив (array).
Функция
  1. <?php
  2. function xml_decode($XML)
  3. {
  4.     // Clean up white space
  5.     $XML = trim($XML);
  6.     $returnVal = $XML; // Default if just text;
  7.  
  8.     // Expand empty tags
  9.     $emptyTag = '<(.*)/>';
  10.     $fullTag = '<\\1></\\1>';
  11.     $XML = preg_replace ("|$emptyTag|", $fullTag, $XML);
  12.  
  13.     $matches = array();
  14.     if (preg_match_all('|<(.*)>(.*)</\\1>|Ums', trim($XML), $matches))
  15.     {
  16.         if (count($matches[1]) > 0) $returnVal = array(); // If we have matches then return an array else just text
  17.         foreach ($matches[1] as $index => $outerXML)
  18.         {
  19.             $attribute = $outerXML;
  20.             $value = xml_decode($matches[2][$index]);
  21.             if (! isset($returnVal[$attribute])) $returnVal[$attribute] = array();
  22.                 $returnVal[$attribute][] = $value;
  23.         }
  24.     }
  25.     // Bring un-indexed singular arrays to a non-array value.
  26.     if (is_array($returnVal)) foreach ($returnVal as $key => $value)
  27.     {
  28.         if (is_array($value) && count($value) == 1 && key($value) === 0)
  29.         {
  30.             $returnVal[$key] = $returnVal[$key][0];
  31.         }
  32.     }
  33.     return $returnVal;
  34. }
  35. ?>

Пример
  1. <?php
  2. $xml_code = '<?xml version="1.0" encoding="windows-1251"?>
  3. <data>
  4. <name>TEST</name>
  5. <site>flapps.ru</site>
  6. </data>';
  7. $array = xml_decode($xml_code);
  8. print_r($array);
  9. ?>
Изображение
Аватара пользователя
ukhov
Модератор
Модератор
 
Автор темы
Сообщения: 1343
Зарегистрирован: 04 янв 2011, 21:19
Откуда: Санкт-Петербург
Благодарил (а): 85 раз.
Поблагодарили: 155 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Вернуться в PHP



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0