Как обработать XML размером > 50 мб

Тема в разделе "PHP", создана пользователем bvb, 24 фев 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    190
    Симпатии:
    34
    Подскажите как?
     
  2. *mm*

    *mm* Создатель

    Регистр.:
    1 окт 2009
    Сообщения:
    29
    Симпатии:
    2
    А в чем вопрос то?
     
  3. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    190
    Симпатии:
    34
    Вопрос вынесен в название темы. А конкретнее ну скажем в файле есть узлы с числовыми аттрибутами и надо просуммировать значения этих аттрибутов.
     
  4. *mm*

    *mm* Создатель

    Регистр.:
    1 окт 2009
    Сообщения:
    29
    Симпатии:
    2

    Вопросов связанных с обработкой XML огромное множество, как по Вашему я должен угадать, что именно требуется Вам?
    Оформляйте вопрос, более полно, предоставляйте максимум информации, чтобы было понятно.

    Хорошо, что именно составляет сложность?
    Разбор XML?
    Написание скрипта, который посчитает общую сумму?
     
  5. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    судя по размеру файла, вам нужен SAX парсер
    он предназначен для разбора XML-документов сколь угодно большого размера
    дальше думаю сами справитесь-примеров в сети по работе с SAX более чем достаточно
     
    bvb нравится это.
  6. *mm*

    *mm* Создатель

    Регистр.:
    1 окт 2009
    Сообщения:
    29
    Симпатии:
    2
    Какая разница, какой размер файла?
    Всегда есть выбор писать самому, или искать готовое решение.
     
  7. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    190
    Симпатии:
    34
    Проблема в подсчете. Но сейчас я стал задумываться о том, чтобы загружать xml файл в базу mysql. Что вы скажете об этом?
     
  8. *mm*

    *mm* Создатель

    Регистр.:
    1 окт 2009
    Сообщения:
    29
    Симпатии:
    2
    Как вариант, на мой взгляд даже наиболее удобный.
    Сначала рекурсивно обходите xml, получившийся массив, записываете в БД. Ну или нужные Вам значения массива.
    В итоге у Вас получиться колонка с определенными атрибутами, ее выводите в цикле и считаете сумму.
     
  9. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    огромная разница
    попробуй XML-документ размером в 40ГБ отпарсить DOM-парсером
    у тебя ничего не выйдет, так как он тупо не влезет в оперативку
    а теперь тоже самое с помощью SAX-парсера.
    легко и не принужденно, по скорости ненамного медленнее обычного чтения с файла.
     
  10. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Чувак, так для этого вовсе не надо парсить XML. ОБычным образом читаешь построчно файл через gets() (и пофигу, какого он там у тебя размера, в память он читается построчно и поэтому проблем нет), и дальше каждую строчку ты делаешь preg_match на предмет нахождения твоего узла с числовым атрибутом. Если нашел - прибавляешь. Все.

    Способ, конечно, некошерный, но если у тебя действительно стоит такая задача, то имхо проще сделать и забыть, чем разбираться как "по-правильному" отпарсить то, что не влазит в память. Как в том анекдоте, "вам шашечки или ехать?".
     
    bvb нравится это.
Статус темы:
Закрыта.