29.03.2006, 09:27 | #1 |
Участник
|
нехватает памяти для xml
Доброе утро.
Формирую в аксапте xml-файл больших размеров. На каком-то этапе, когда используемая память компьютера раза в 3-4 превосходит объем оперативки, происходит сбой, и через некоторое время аксапта выплевывает ошибку, общий смысл которой сводится к нехватке памяти. Можно обойти? |
|
29.03.2006, 11:16 | #2 |
Участник
|
Цитата:
Сообщение от Smith
аксапта выплевывает ошибку, общий смысл которой сводится к нехватке памяти.
|
|
29.03.2006, 11:33 | #3 |
Участник
|
там нереально придется увеличивать
Я даже 5% от файла не смог выгрузить. Может можно как-то "на лету" писать в xml-файл, а не ждать пока он полностью сформируется (в оперативке похоже) и потом одним махом запишется на диск конструкцией xmlDocument.save(fileName); ? |
|
29.03.2006, 12:06 | #4 |
Banned
|
Цитата:
Сообщение от Smith
Может можно как-то "на лету" писать в xml-файл, а не ждать пока он полностью сформируется (в оперативке похоже) и потом одним махом запишется на диск конструкцией xmlDocument.save(fileName);
Еще вариант без XSL: работайте с отдельными документами как описано выше, извлекайте текст отдельных "веток" методом XMLNode.xml(), а "конверт" и заголовок XML-файла запрограммируйте вручную. Записывайте результат на диск с помощью AsciiIO. |
|
29.03.2006, 17:18 | #5 |
Участник
|
может просто через AsciiIo его писать?
|
|
30.03.2006, 17:51 | #6 |
Участник
|
фуф, совсем зарылся я с этими классами... xmlNode, XmlNodeList и иже с ними. А время идет..
EVGL, может объясните на примере как "прокрутить" xmlDocument от начала до конца, вытащив при этом все его узлы/записи? У меня как-то не получается в цикл все это загнать, не знаю чем оперировать |
|
30.03.2006, 18:17 | #7 |
Banned
|
Объяснять неохота, существует масса вариантов, но вот Вам пример рекурсивного кода, который ищет узел с заданным именем сквозь весь документ:
PHP код:
xmlNode = docType.getXMLNodeByTagName(inputDocument.root(), _tagName); |
|
31.03.2006, 14:32 | #8 |
Участник
|
а это не эквивалентно _parentNode.selectSingleNode('////'+_tagName)?
еще вот попалось: Global::recordFromXMLNode - там цикл при помощи nextSibling |
|
31.03.2006, 16:37 | #9 |
Пенсионер
|
Главная проблемма в том что используется технология обработки DOM, при этом в памяти формируется ПОЛНАЯ объектная модель XML документа и если он большой, то никакой памяти не хватит!
Для чтения лучше использовать SAX технологию, а для записи asciiIO я по-моему где-то на форуме выкладывал проектик-пример работы с XML документами с использованием SAX технологии
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
31.03.2006, 16:42 | #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!.. |
|
|
|