Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > глюки xml_parse


Автор: comcon1 13.5.2009, 00:59
Доброй ночи, винград. Столкнулся с довольно странной проблеммой. Есть файл 5-50 мегабайт, парсю его xml_parser-ом. Все как в мануалах:

Код

<?php
        while ($data = fread($fp, 4096)) {
            if (!xml_parse($parser, $data, feof($fp))) {
                printf("XML error: %s at line %d while parsing entity %s\n",
                       xml_error_string(xml_get_error_code($parser)),
                       xml_get_current_line_number($parser), $openEntityNames);
                xml_parser_free($parser);
                return false;
            }
        }
?>


Парсится дамп базы данных, то есть много одинаковых макротэгов "record" со схожей внутренней структурой.
Парсинг идет блоками по 4096 символов. Все парсит хорошо, но я заметил, что некоторое содержимое тэгов (то есть не аттрибуты, а "<тэг>содержимое</тэг>") режется. Причем мало того что режется, функция конца тэга endElementHandler периодически срабатывает дважды на одну запись. Первый раз выдает половину содержимого, второй раз все. Изменяю число 4096 на 8000 - все нормально. Для моей задачи я могу ограничиться выставлением числа символов в максимальную длину двух записей БД, это не очень много, и парсер будет работать нормуль. Но все же:

Первый вопрос: лечится ли это вообще?
Второй вопрос: пользуются ли нормальные люди xml_parsers, или это пережитки динозавров?

Автор: Kallisto 3.9.2009, 16:00
fgets ?

Автор: IZ@TOP 3.9.2009, 16:59
comcon1, я настоятельно рекомендую SAX парсер http://php.net/xmlreader.

Добавлено через 1 минуту и 2 секунды
Kallisto, я уже предупреждал про минус? fgets не имеет никакого отношения к парсингу XML и данной теме.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)