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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг XML для начинающиго 
:(
    Опции темы
Areostar
Дата 2.7.2013, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

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



в первый раз понадобилось парсить большой файл(к тому же не совсем правильно составленный)
 
Код

    $str = file_get_contents("http://www.site.ru/editXML/scripts/t6.xml");
    $xml = new SimpleXMLElement($str);


так вот я получаю всё содержимое файла

но теперь как мне  теперь аккуратно перебрать каждый узел заходя во внутрь до последнего уровня вложенности?

тем более мне надо каждый раз проверять в каком теге я нахожусь(они разные, говорил же не правельно соствален smile ).

если возможно проиллюстрируйте поджалуйста!! smile 
PM MAIL   Вверх
Sanchezzz
Дата 2.7.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



SimpleXMLElement не верный инструмент для большого размера так как копирует весь файл в оперативу тем самым может произойти крах нехватки памяти, выделяемое подскрипт, конкретно найти, что то можно например через xpath

Используйте XMLReader этот монстр читает любой размер XML файлов поэтапно , последний раз что я им парсил была XML50мб выгрузки 1С и, видео каталог с megogo.net обьемом в 20мб. SimpleXMLElement  умер в обработке.

Документация по XMLReader  есть на сайте php.net с примерами.

мой стандартный багаж при парсинге xml

Код

function xml2assoc(&$xml){ 
    $assoc = NULL; 
    $n = 0; 
    while($xml->read()){ 
        if($xml->nodeType == XMLReader::END_ELEMENT) break; 
        if($xml->nodeType == XMLReader::ELEMENT and !$xml->isEmptyElement){ 
            $assoc[$n]['name'] = $xml->name; 
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value; 
            $assoc[$n]['val'] = xml2assoc($xml); 
            
            $n++; 
        }else if($xml->nodeType == XMLReader::CDATA){
            $assoc[$n] = $xml->value; 
            
        } 
        else if($xml->isEmptyElement){ 
            $assoc[$n]['name'] = $xml->name; 
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value; 
            $assoc[$n]['val'] = ""; 
            $n++;
    
        }
        
        else if($xml->nodeType == XMLReader::TEXT) $assoc = $xml->value; 
    } 
    return $assoc; 


// ----- Парсинг 

$file = 'objects.xml';
$reader = new XMLReader();
$reader->open($file);
$reader->read(); // сдвиг внутрь секции 
$reader->read(); // продвигаемся еще глубже
$data  = xml2assoc( $reader ); // получаем содержимое 

$i=0;
foreach($data as $item){
    pre($item); // показываем массив в print_r
    $i++;
    if($i==50) break(1);
}




Это сообщение отредактировал(а) Sanchezzz - 2.7.2013, 13:34


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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