Как обработать xml-документ большого размера?

Тема в разделе "Регулярные выражения", создана пользователем Matinier, 20 янв 2010.

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

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Имеется xml-документ, размер которого составляет 160 МБ.
    Надо преобразовать его в другой xml-документ (поменять название узлов, добавить/удалить некоторые атрибуты, взяв при этом только часть информации из каждого узла).
    Пробовал применить для этой цели SimpleXML - не грузится в DOM.
    Применил XMLReader - памяти хватает, но при обращении к скрипту на сервере все-равно вылетает 502 Gateway Timeout.
    Возможно ли регулярками обработать документ такого объема быстрее, чем разного рода специализированными классами PHP?
    И вообще: каким инструментом можно разобрать/преобразовать xml-файл такого объема?
     
  2. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    TextPipePro - решение всех твоих проблем
    Есть на форуме...
     
  3. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Хорошая утилита, однако возникает другой вопрос: как к ней обратится из php-скрипта. Просто мне нужно, что бы юзер мог загрузить выходной документ с адреса типа: http://site.com/xmldoc.php
    Да и еще один момент: на сервере, где лежит скрипт, может стоять только лицензионное ПО :confused:

    Нет, эта программа мне не подходит.
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Вариант http://webi.ru/webi_articles/big_xml.html пробовали?
    + как вариант разбить файл на несколько частей и прочитать его
     
    Matinier нравится это.
  5. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Вообще регулярки быстрее различных анализаторов DOM и XPath.
     
  6. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    У меня тоже такое впечатление. Проблему решили - увеличили время для отработки скрипта на сервере и документ разобрался XMLReader'ом.

    KillDead, функция полезная но есть один нюанс (можно ее доработать в принципе:( если один из узлов содержит данные CDATA, то этот парсер отвалиться.
    Пример:

    <vendor><![CDATA[5 яблок > 3 апельсинов]]></vendor>

    во-первых формат записи CDATA приведет к ошибке; во-вторых к ошибке приведет символ ">", хотя я имею полное право его вставить в запись CDATA.
     
Статус темы:
Закрыта.