Чтение/запись больших XML файлов

dub

Новичок
Чтение/запись больших XML файлов

Добрый день! У меня возникла одна небольшая проблема с большими xml файлами. :) . Суть задачи такова - надо читать и писать xml файлы большого размера(10mb -2gb). С чтением, как я понял нужно останавливатся на XMLReader - ре, а вот внесение каких-либо коректив в файлы столь большого размера, остается для меня загадкой. Эсли не сложно, подскажите что-то под php5.
 

Steamroller

Новичок
Так обычным sax-парсером идешь по файлу, что не надо менять - пишешь прям в неизменном виде в новый файл, что надо - пишешь в измененном, когда до конца доходишь - старый файл на новый заменяешь.
 

dub

Новичок
Большое спасибо! Да и в правду все гениальное просто! правда не знаю что выйдет со временем работы скрипта... dom, например работал где то минут от 5 и до бесконечности. (при размере файла не больше 10 mb, иначе не работал вобще)
 

slach

Новичок
предложенная методика годится если изменения носят косметический характер
ну там атрибут поменять
или содержимое какого то тэга

а если требуется сложное перестроение, то даже не знаю что посоветовать

написать через XMLReader можно, но логика там будет, будь здоров =) потому что вы фактически аналог XSLT преобразования делаете, которое для таких объемов естественно в чистом виде не пригодно

кстати есть еще XMLWriter
 

dub

Новичок
да XMLWriter, пробовал использовать, правда на файлах меньшего размера, но логика получалась не очень простой. Сложно например, нелинейную вложенность реализовать. хотя, если честно, я к нему не особо много документации нашол.
 

dub

Новичок
=>
Not Found
The manual page you are looking for (http://php.paco.net/manual/en/ref.xmlwriter.php) is not available on this server right now. Please check back later, or if the problem persist, contact the webmasters.
С XMLReader - ом все то класно. А вот с XMLWriter - ом такая вот штука. доков не нашол пока. :( пару примеров есть на:
http://wiki.cc/php/XmlWriter
еще несколько в самом пакете.http://pecl.php.net/package/xmlwriter:(
 

firebird

Новичок
Передо мной стоит задача прочитать данные из XMLфайла
(размер более 30 МБайт). На хостинге доступен только рнр4
Существуют ли классы для обработки XML файлов использующие SAX подход?
 

Pustota

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

dub

Новичок
Pustota
(только не через SAX) Желательно, со сложной структурой данных.
А какого размера файл? просто по моему впечатлению файлы больше 5 мегабайт обрабатывать не SAX методом очень даже сложно. по крайней мере 40 метров DOM- ом, решительно не обрабатывались. Но в любом случае, если структура данных сложная.( или вообще динамическая) я бы использовал что то вроде:
PHP:
$domDoc = new DOMDocument();
$domDoc->load($this->file);
$xp=new DOMXPath($domDoc);
$node = $xp->query($path);
Где $path - запрос Xpath. (поскольку это просто строка можно сделать так чтоб она менялась, соответственно выбирать имено то что тебе надо и как тебе надо)
Таким образом в $node будет любой извращенный запрос XPath.
потом
PHP:
DOMDocument->saveXML($node)
вот и строка содержащая нужный XML(причем детей ноды тоже) . можна этого не делать выцепить еще несколько кусков xml. а потом создать новый Dom и с помощью
PHP:
DOMDocument->importNode()
собрать ети куски в новом документе.
PS : $node = $xp->query($path); - возвращяет ноде лист чтоб получить доступ к елементу используй DOMNodelist->item()
 

Pustota

Новичок
Размер больше 5 мегабайт, но намного меньше 40. где-то около 6-10 Mb. А про запросы Xpath можете просветить?
И ещё, надо что-нибудь дополнительно к PHP5 устанавливать, чтобы все эти вышеописанные функции понимались?
 

dub

Новичок
Нет для PHP5 ничего дополнительного устанавливать не нада (разве что исползовать версию 5.0.5, хотя можна и 5.0.0 но зачем?) . правда совместимости с php 4 нет (там нада использовать аналоги )
XPath - язык запросов к XML. http://www.w3.org/TR/xpath. В принципе довольно простой. но лучше, как мне кажется в него особо не вникать (особенно если нет желаний. ) так мне , например вполне хватает примеров из книги http://www.phpclub.ru/?m=book&s=136. PHP 5 (В подлиннике) Котеров Д., Костарев А. BHV-Санкт-Петербург. к стате примеры
http://book.php5.ru/ и http://php5.dklab.ru/. В єлектронном виде она тоже где то есть (мне так говорили.) в этих самых примерах есть описание програмки позволяющей задавать Xpath запросы и наглядно видеть результат. (после небольшой доработки она вообще стала для меня не заменимой . для тестирования Xpath запросов)
 
Сверху