Оптимальный вариант Парсинга большого файла XML

Onore

Новичок
Оптимальный вариант Парсинга большого файла XML

Здравствуйте алл.

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

Построчное чтение в память.
1. SAX
2. регулярные выражения...

Но есть несколько вопросов.

При работе DOM все хорошо мы имеем дерево детей ноды и т.д.

Получается нужно читать файл не построчно, а по нодово тоесть
не

<nodeName>text \r\n
next line</nodeName>

a

<nodeName>text \r\n next line</nodeName

или я может потерялся и бред несу :)
 

Onore

Новичок
ну ПХП5 это будущее :)

А насчет чтения файла распутайте меня пожалуйста.
И насчет методов какой все же использовать файл от 72Мб+-
 

slach

Новичок
в принципе SAX могут быть быстрее чем preg_*
и наоборот
зависит от структуры XML и требуемой логики работы

DOM \ SimpleXML и т.п. использовать не смейте...

вообще почитай http://php.net/manual/en/ref.xml.php
особенно примеры кода и комментарии...

думаю все встанет не свои места
 

Onore

Новичок
Спасибо, буду изучать ссылки :)

А DOM и не думал, он же все в память кушает, для построения дерева, это хорошо только если будет Мега-Супер сервер а лучше 4

-~{}~ 15.11.05 14:29:

У меня в XML в содержании встречается вот такое, из-за чего парсер Експлорера выдает ошибку:
<name>Содержание <Тескст> даее </name>

Выдает ошибку XML.
Пропущен знак равенства между атрибутом и его значением. Ошибка при обработке ресурса ''file:///C:/Documents and Settings/v...

align=left&gt;Продвинутый метод запоминания новых слов - <Тест по карточкам>

Как-то можно игнорировать такой <текст>?

-~{}~ 15.11.05 14:40:

При маленьком файле все ок, файл считывается в строчку и все работает при большом файле Ошибка.
XML error: not well-formed (invalid token) at line 1

Как можно следить, чтобы читать по Ноде?

Код:
$xml_parser = new xml2Array();
$file = 'offer_sm.xml';
if (!($fp = fopen($file, "r"))) {
   die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
echo $data. "<hr>";
   if (!$xml_parser->parse($data)) {
       die(sprintf("XML error: %s at line %d",
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
 }
 
Сверху