ФорумПрограммированиеPHP для идиотов → чем парсить XML?

чем парсить XML?

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 28 сентября 2010 г. 12:58, спустя 2 минуты 6 секунд

    Нахуй его в массив загонять?
    simplexml поддерживает xpath, который позволяет извлечь из XML практически все что угодно, в одно действие.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 сентября 2010 г. 13:00, спустя 2 минуты 9 секунд

    AlexB, ты это фабьену объясни))
    Сапожник без сапог
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 28 сентября 2010 г. 13:02, спустя 1 минуту 55 секунд

    Не палите контору с Simple_XML :)
  • Коля Дубр

    Сообщения: 45 Репутация: N Группа: Адекваты

    Spritz 29 сентября 2010 г. 3:16, спустя 14 часов 14 минут 46 секунд

    Есть 2 подхода.

    1. XML выгружается в память, как-то там выстраивается, далее, как правило, по нему можно искать при помощи xPath. Сюда - DOM, SimpleXML. Плюсы - легко искать, минусы - не годится для больших файлов. SimpleXML пошустрее, DOM - удобнее для построения деревьев. Если надо что-то прочитать (например, API всяких сервисов типа геокодера) - я использую SimpleXML, для формирования дерева на корм XSLT - соответственно DOM. Они между собой совместимы, есличо.

    2. XML читается последовательно, память не засирается. При этом либо парсер кидает события в начале и конце ноды (SAX - http://php.net/XML ) - это называется "push", либо софт сам управляет чтением, как бы двигая курсор ("дай следующий нод", "полезли вглубь" и т.д.) - это XMLReader, подход называется "pull". SAX - неудобный до блевоты, но шустрый, я им делаю импорт всякого большого говна. SAX в принципе способен жрать невалидный XML, и можно начать парсинг с произвольного места. XMLReader не юзал, собираюсь при случае.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 сентября 2010 г. 9:42, спустя 6 часов 25 минут 33 секунды

    Коля Дубр, адекват! ))
    Спустя 9 сек.
    шепни за мой разбан там где надо))
    Спустя 9 сек.
    а то темы смешные бывают, потроллить хочется :(
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 29 сентября 2010 г. 9:54, спустя 11 минут 42 секунды

    phpdude, тебя и на серче забанили, сучка матюкливая?)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 сентября 2010 г. 10:01, спустя 7 минут 2 секунды


    phpdude, тебя и на серче забанили, сучка матюкливая?)
    сейчас тебя тут забанят.
    Спустя 37 сек.
    да забанил один чувак, друг коли))) просто не все админы адекватные и с хорошим настроением как у меня. обыно то чмыри
    Сапожник без сапог
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 29 сентября 2010 г. 10:40, спустя 39 минут 21 секунду

    phpdude, золотой ты человек Федор Венедиктович xD
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 29 сентября 2010 г. 13:29, спустя 2 часа 49 минут 17 секунд


    Есть 2 подхода.
    Резюмирую:
    1. XML небольшой, но сложный, требует хитрого анализа - SimpleXML.
    2. XML большой, но простой, используется тупо для передачи однотипных данных - SAX или XMLReader.
    3. XML большой и сложный, требует хитрого анализа - посылаем нахуй того кто придумал такую архитектуру, пусть делит XML на много маленьких.
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 29 сентября 2010 г. 13:30, спустя 11 секунд

    3. XML большой и сложный, требует хитрого анализа - посылаем нахуй того кто придумал такую архитектуру, пусть делит XML на много маленьких.


    А если он на хуй посылает?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 29 сентября 2010 г. 13:33, спустя 3 минуты 29 секунд


    А если он на хуй посылает?
    Тем хуже для него … будет сам дрочить на свой XML.
    Спустя 165 сек.
    Кстати, тут недавно наткнулся. В SimpleXML нельзя сделать:

    $size = $sxml->xpath('count(//nodes)');
    а, только
    $size = count($sxml->xpath('//nodes'));

    что несколько напрягает.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!