![]() |
#1 |
Участник
|
нехватает памяти для xml
Доброе утро.
Формирую в аксапте xml-файл больших размеров. На каком-то этапе, когда используемая память компьютера раза в 3-4 превосходит объем оперативки, происходит сбой, и через некоторое время аксапта выплевывает ошибку, общий смысл которой сводится к нехватке памяти. Можно обойти? |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от Smith
аксапта выплевывает ошибку, общий смысл которой сводится к нехватке памяти.
|
|
![]() |
#3 |
Участник
|
там нереально придется увеличивать
![]() Я даже 5% от файла не смог выгрузить. Может можно как-то "на лету" писать в xml-файл, а не ждать пока он полностью сформируется (в оперативке похоже) и потом одним махом запишется на диск конструкцией xmlDocument.save(fileName); ? |
|
![]() |
#4 |
Banned
|
Цитата:
Сообщение от Smith
Может можно как-то "на лету" писать в xml-файл, а не ждать пока он полностью сформируется (в оперативке похоже) и потом одним махом запишется на диск конструкцией xmlDocument.save(fileName);
Еще вариант без XSL: работайте с отдельными документами как описано выше, извлекайте текст отдельных "веток" методом XMLNode.xml(), а "конверт" и заголовок XML-файла запрограммируйте вручную. Записывайте результат на диск с помощью AsciiIO. |
|
![]() |
#5 |
Участник
|
может просто через AsciiIo его писать?
|
|
![]() |
#6 |
Участник
|
фуф, совсем зарылся я с этими классами... xmlNode, XmlNodeList и иже с ними. А время идет..
EVGL, может объясните на примере как "прокрутить" xmlDocument от начала до конца, вытащив при этом все его узлы/записи? У меня как-то не получается в цикл все это загнать, не знаю чем оперировать ![]() |
|
![]() |
#7 |
Banned
|
Объяснять неохота, существует масса вариантов, но вот Вам пример рекурсивного кода, который ищет узел с заданным именем сквозь весь документ:
PHP код:
xmlNode = docType.getXMLNodeByTagName(inputDocument.root(), _tagName); |
|
![]() |
#8 |
Участник
|
а это не эквивалентно _parentNode.selectSingleNode('////'+_tagName)?
еще вот попалось: Global::recordFromXMLNode - там цикл при помощи nextSibling |
|
![]() |
#9 |
Пенсионер
|
Главная проблемма в том что используется технология обработки DOM, при этом в памяти формируется ПОЛНАЯ объектная модель XML документа и если он большой, то никакой памяти не хватит!
Для чтения лучше использовать SAX технологию, а для записи asciiIO я по-моему где-то на форуме выкладывал проектик-пример работы с XML документами с использованием SAX технологии
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
![]() |
#10 |
Участник
|
Esli XML doc ne slozhnij - prosche bed' samomu ego sozdavat.. a ne cherez XML wraper.. proizvoditelnost'/resursi dumaju raz v 100 vozrastet...
PS: XML eto ved' COM!.. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|