Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
Если Вы сами создаете XML или имеете полномочия сформировать требования к нему, то, может быть, стоит создавать вместо одного большого несколько файлов поменьше и считывать их последовательно?
На счёт своего ответа я не уверен... В MSXML есть ISAXXMLReader (почитай в инете про SAX, кажется оно позволяет читать дерево не загружая весь документ, естественно это только для чтения).
Первое пробовал. Грузит очень долго даже 300 мб файл. ClientDataSet загружает быстрее.
О втором варианте тоже думал. Прийдется его использовать. Можно взять заголовок файла Xml и конец. А посредине вставлять записи из файла. Считываем 100 заисей добавляем заголовок и конец xml файла. Открываем датасет с этими записями. Потом следующие 100 записей и т.д.
Альтернативные варианты:
1) разбирать xml файл с помощью какого-нибудь xml-парсера, извлекать оттуда нужные значения и добавлять в БД запросом. Например это можно сделать с помощью TXmlDocument. Правда есть сомнения, что это будет быстро. Насколько я понимаю, парсер xml сначала разбирает весь файл и строит дерево документа. Но можно попробовать, это просто и быстро (в смысле быстро - попробовать). Можно еще попробовать выбрать парсер, используемый TXmlDocument. По умолчанию это msxml, но стандартно присутствуют еще 2 по-моему, можно попробовать их (свойство TXmlDocument.DomVendor).
2)Если известна структура документа, то разбирать его самому: открыть как текстовый файл, считывать кусок текста, разбирать, находить знчения и добавлять их в БД и т.д. до конца документа.
to xr007
Ставьте тип ответа "сообщение от автора вопроса"
Если Вам всё-равно ВСЕ данные нужно переливать, чего ж мучаться с разделением пачек информации, повесьте красивый прогрессбарчик и вперед! Залить-то всё-равно нужно.
во время того, как ClientDataSet подгружает xml, комп тормозит. оперативка расходуется. файл может быть в принципе любого размера. больше гигабайта тоже. Вы правильно поняли что данные надо в базу добавить, только как это сделать так чтобы они не сразу все брались из файла, а понемногу.
Если формат фиксированный, то я бы "заливал" его в БД. А оттуда можно многое. А постоянно терзать винт текстовыми данными, да еще и парсить их каждый раз ... мне кажется не позволительной роскошью ...
(если я правильно понял вопрос)
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.