powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Парсер больших xml-файлов
25 сообщений из 35, страница 1 из 2
Парсер больших xml-файлов
    #39492752
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаю, что тема поднималась, но всё ж спрошу.
Есть адресный классификатор ФИАС в xml-формате. Файл с информацией о домах весит 20 гигов. Писец. Чем его реально парсить с приемлемой скоростью?
Попробовал NativeXML. Всё грустно.
Или уже не париться и взять dbf-версию ФИАС?
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492757
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExterisЗнаю, что тема поднималась, но всё ж спрошу.
Есть адресный классификатор ФИАС в xml-формате. Файл с информацией о домах весит 20 гигов. Писец. Чем его реально парсить с приемлемой скоростью?
Попробовал NativeXML. Всё грустно.
Или уже не париться и взять dbf-версию ФИАС?
Любым SAX-парсером, по идее, DOM не годится для таких объёмов.
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492767
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+1. Он же очень регулярный. Тут проще всего TStreamReader использовать.
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492779
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ветке mssql есть целая ветка посвященная этой теме, я как раз ФИАС в mssql грузил через xmlbulkload. За пару часов фиас полностью обновляется.
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492780
Сюзанна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть стандартный SAX парсер XmlLite, во всех Windows
А еще лучше взять dbf версию, в ней хоть ошибок меньше
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492787
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СюзаннаА еще лучше взять dbf версию, в ней хоть ошибок меньше
ЕМНИП, на офсайте налоговой заявлено, что в скором времени от дбф должны отойти. Так что, это отсрочка решения проблемы.

А вот SAX for Pascal кто-нибудь юзал? Увы, его прекратили развивать в 2003г, последняя заявленная поддержка для Д7. Зато внутри архива демки и дока
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492790
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exteris,

DBF распарсится быстрее
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492792
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикладываю счемы для импорта, адаптируете под себя
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492793
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
USE [fias]
GO
/****** Object:  StoredProcedure [dbo].[spXMLBulkLoad]    Script Date: 21.06.2016 10:36:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spXMLBulkLoad] (
	 @@File		SysName
	,@@Schema	SysName
	,@@DataBase	SysName	= '<DefaultDataBase>'
) AS BEGIN -- EXEC dbo.spXMLBulkLoad 'Z:\Path\Data.xml','Z:\Path\Schema.xsd'
	-- EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE;
	DECLARE	 @ErrCode	Int
		,@OLEXMLBulk	Int
		,@ErrMethod	SysName
		,@ErrSource	SysName
		,@ErrDescript	NVarChar(4000)
	SET @ErrSource = 'c:\fias\XMLBulkError.xml'	--  файл ошибки (OPENROWSET требует константу)
	EXEC @ErrCode = master.sys.sp_OACreate 'SQLXMLBulkLoad.SQLXMLBulkload' ,@OLEXMLBulk OUT
	IF (@ErrCode = 0) BEGIN
		SET	@@DataBase	= 'Provider=SQLOLEDB;Data Source=.;DataBase=' + @@DataBase + ';Integrated Security=SSPI'
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'ConnectionString'	,@@DataBase		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ConnectionString'	GOTO Error END
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'ErrorLogFile'	,@ErrSource		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'ErrorLogFile'	GOTO Error END
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'SchemaGen'	,1		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'SchemaGen'	GOTO Error END		
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'SGDropTables'	,1		IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'SGDropTables'	GOTO Error END				
		EXEC @ErrCode = master.sys.sp_OASetProperty	@OLEXMLBulk ,'CheckConstraints'	,1			IF (@ErrCode != 0) BEGIN SET @ErrMethod = 'CheckConstraints'	GOTO Error END
		EXEC @ErrCode = master.sys.sp_OAMethod		@OLEXMLBulk ,'Execute', NULL	,@@Schema, @@File
		IF (@ErrCode != 0) BEGIN
			SET @ErrMethod = 'Execute'
			DECLARE	 @Exist	Int
				,@Error	XML
			EXEC	master.dbo.xp_FileExist	@ErrSource, @Exist OUT
			IF (@Exist = 1) BEGIN
				SELECT	 @Error		= E.Error
							-- Обход глюка
							+ CASE	WHEN Right(E.Error,1) != '>'	THEN 'lt>'
								ELSE ''				END
				FROM	OPENROWSET(BULK 'c:\fias\XMLBulkError.xml',SINGLE_NCLOB)E(Error) -- Из @ErrSource файла
				SELECT	@ErrDescript	= IsNull(@ErrDescript	,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('/Result/Error')E(Error)
				SELECT	@ErrDescript	= IsNull(@ErrDescript	,'') + E.Error.value('Description[1]','SysName') + ' '
				FROM	@Error.nodes('/Error/Record')E(Error)
			END ELSE
				GOTO Error
		END
		GOTO Destroy
	Error:	EXEC @ErrCode = master.sys.sp_OAGetErrorInfo	@OLEXMLBulk ,@ErrSource OUT ,@ErrDescript OUT
	Destroy:EXEC @ErrCode = master.sys.sp_OADestroy	@OLEXMLBulk
	END ELSE
		SELECT	 @ErrMethod	= 'SQLXMLBulkLoad.SQLXMLBulkload'
			,@ErrSource	= 'sp_OACreate'
			,@ErrDescript	= 'Ошибка создания OLE объекта'
	-- Вывод ошибок
	IF (@ErrMethod IS NOT NULL) BEGIN
		RAISERROR('Ошибка при выполнении метода "%s" в "%s": %s',18,1,@ErrMethod,@ErrSource,@ErrDescript)
		RETURN	@@Error
	END
END
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492795
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу предупреждаю что никаких заливок сразу в рабочие таблицы, сначала в промежуточные, а уже из них переносишь в рабочие. меня минут 20 переносилось кажется.
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492800
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, да, в этом году мы отказались от использования своего ФИАС, используем сервис https://dadata.ru/
Работает хорошо, и больше никакой головной боли об адресах и обновлении фиас у себя
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492808
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUExteris,

DBF распарсится быстрее
Я вот тоже так думаю.
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492819
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СюзаннаА еще лучше взять dbf версию, в ней хоть ошибок меньше
Они разве не идентичны?
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492950
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сюзаннаесть стандартный SAX парсер XmlLite, во всех Windows

XmlLite - не SAX-парсер, а pull-парсер.

Он тоже "лёгкий", но у него совсем противоположная логика работы.

SAX-парсер входит в состав MSXML6, наряду с DOM-парсером

Оба MSXML6 и XMLLite появились то ль в XP SP3 то ли даже в XP SP2

Есть так же сторонняя реализация XMlLite под Линукс, но насколько быстрая и надежная - хз, в глаза ее не видел
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39492961
Bali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокЕМНИП, на офсайте налоговой заявлено, что в скором времени от дбф должны отойти. Так что, это отсрочка решения проблемы.
А где вы такое прочитали?, я что то не нашел. Отказ от KLADR v4 - да, а что ФИАСа не будет в DBF? не нашел.
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493100
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В относительно новой библиотеке от гуру xml -- oxml -- есть куча различных парсеров/интерфейсов к ним, в т.ч. и поточные (SAX).
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493151
Распарсивал как-то xml от ФИАС, там были иногда неверные длины полей, плюнул, скачал dbf версию
И быстрее и проще извлекать
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493163
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой профит от пул-парсеров?
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493230
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BaliОтказ от KLADR v4 - да, а что ФИАСа не будет в DBF? не нашел
сорьки, это я что-то недопонял, когда бегло читал. Действительно, ДБФки останутся
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493289
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А теперь расскажите сколько у Вас эти dbf-ки в БД заливаются, особенно если не через bc
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493296
eeeу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Внезапно dbf это БД
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493304
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eeeу,

Так они всёравно не индексированные
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493336
eeeу
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU, а xml индексирован, угу.
Файл 20 гигов, а dbf для 1 области примерно 0,2 гига, т.е. в 100 раз меньше
и что проще индексировать?
xml не для хранения информации предназначен, по любому нужно распарсивать и хранить в БД.
а dbf уже в формате БД, не нравится формат легко конвертируется в другой.
И сравните размеры файлов xml и dbf
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493342
Bali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эндиА теперь расскажите сколько у Вас эти dbf-ки в БД заливаются, особенно если не через bc
А зачем их целиком закачивать? Там по каждому объекту вся история изменений, с момента попадания объекта в ФИАС, а реально нужны только актуальные данные. Да и в структуре записи полно ненужной информации одних GUIDов 5 штук.
В MSSql Express ее и не запихнешь. Закачивают кому что нужно.
...
Рейтинг: 0 / 0
Парсер больших xml-файлов
    #39493344
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот на моменте легко конвертируется, остановимся поподробнее. Представим себе абстрактного программера которому надо написать конвертилку в MSSQL. Он садится и пишет построчное копирование через insert в таблицы sql сервера. Сколько часов у него будет происходить это порно? Сам dbf для хранения тоже не ахти как удобен, хранимку не написать, план запроса с оптимизацией не посмотреть и только на секундочку представим что ФИАС посути древовидная бд. И то что я сделаю обычным запросом в любом адекватном sql сервере, на базе dbf превратится в банальное извращение. imho что фиас в dbf, что в xml сделан исключительно для трансфера информации и никак не для использования именно в этих форматах.
Да и какой больной человек будет таскать с собой для локальной аппликухи базу весом в несколько сотен мегабайт для решения задачи хранения адреса? Если у вас локальное приложение дергайте веб-сервис, хотите свой, хотите чужой, не суть. Суть в том что за этим вебсервисом будет не dbf, а нормальный sql сервер. А если у вас клиент/сервер то тем более весь этот фиас будет в нем.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Парсер больших xml-файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]