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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить данные из аттрибутов? из xml 
:(
    Опции темы
Rock
Дата 16.3.2006, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Воспользовался функцией, приведенной Ирокезом, здесь : http://forum.vingrad.ru/index.php?showtopic=51217
Код

function xparse_xml_file($fpath)
{
    $fcontent=file_get_contents($fpath);
    $parser=xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, $fcontent, $values, $tags);
    $error=xml_get_error_code($parser);
    if($error)
    {
        $column=xml_get_current_column_number($parser);
        $line=xml_get_current_line_number($parser);
        $byte=xml_get_current_byte_index($parser);
        echo xml_error_string($error).' at line: '.$line.', column: '.$column.', byte: '.$byte."\n";
    }
    xml_parser_free($parser);
    $keys=array();
    $name='ini';
    foreach($values as $tag)
    {
        switch($tag['type'])
        {
            case 'open':
            case 'complete':
                array_push($keys, $tag['tag']);
                $e=&$$name;
                $last=array_pop($keys);
                foreach($keys as $key) $e=&$e[$key];
                array_push($keys, $last);
                if(isset($e[$last]))
                {
                    $last_k=(is_array($e[$last])) ? max(array_keys($e[$last])) : '';
                    if(!is_int($last_k))
                    {
                        $e=&$e[$last];
                        $b=$e;
                        $last=1;
                        $last_k=1;
                        $e=null;
                        $e[$last]=$b;
                    }
                    else $e=&$e[$last];
                    $last=$last_k+1;
                    array_push($keys, $last);
                }
                if($tag['type']=='complete')
                {
                    if(isset($tag['value']))
                    {
                        $e[$last]=$tag['value'];
                    }
                    else $e[$last]=null;
                    if(is_int(end($keys))) array_pop($keys);
                    array_pop($keys);
                }
                break;
            case 'close':
                if(is_int(end($keys))) array_pop($keys);
                array_pop($keys);
                break;
        }
    }
    return($ini);
}
$ini = xparse_xml_file('items.xml');
echo '<pre>'.print_r($ini, 1).'</pre>';

функция выводит все в ассоциативный массив, но проблема в том, что она работает с данными между тегами, т.е. <color1>данные</color1>,
а мне нужно вытащить данные из аттрибутов:
<item id='324234' name='23423423' />

PM MAIL ICQ   Вверх
CyClon
Дата 16.3.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



C помощью регулярки придется прописыать все теги. Скорее всего.


--------------------
user posted image
PM   Вверх
Rock
Дата 17.3.2006, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



откопал такую функцию :
Код

function xml2tree2($fpath)
{
  $string=file_get_contents($fpath);
  $parser = xml_parser_create();
  xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
  xml_parse_into_struct($parser, $string, $vals, $index);
  xml_parser_free($parser);

  $stack = array( array() );
  $stacktop = 0;
  $parent = array();
  foreach($vals as $val)
  {
   $type = $val['type'];
   if($type=='open' || $type=='complete')
   {
     // open tag
     $stack[$stacktop++] = $tagi;
     $tagi = array('tag' => $val['tag']);

     if(isset($val['attributes']))  $tagi['attrs'] = $val['attributes'];
     if(isset($val['value']))
       $tagi['values'][] = $val['value'];
   }
   if($type=='complete' || $type=='close')
   {
     // finish tag
     $tags[] = $oldtagi = $tagi;
     $tagi = $stack[--$stacktop];
     $oldtag = $oldtagi['tag'];
     unset($oldtagi['tag']);
     $tagi['children'][$oldtag][] = $oldtagi;
     $parent = $tagi;
   }
   if($type=='cdata')
   {
     $tagi['values'][] = $val['value'];
   }
  }
  return $parent['children'];
}


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


 




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


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

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