Большой XML | |
---|---|
Казакова Сообщений: 3 Дата регистрации: 10.08.2022 |
Эпиграф: "Пришла беда откуда не ждали" (А.Гайдар)
Здравствуйте коллеги! Двадцать лет я тихо мирно сидела на КЛАДР. Внезапно ФСС с переходом на систему "Прямых выплат" потребовал в "Сведениях о застрахованных лицах" указывать код ФИАС. ФНС распространяет систему ГАР ФИАС исключительно в формате XML. До этого я прекрасно переводила XML в DBF с помощью класса XMLAdapter, тем более ФНС дает в придачу схемы XSD, но файлы ГАР ФИАС оказались очень тяжелы для VFP 9. Пока размер XML-документа не превышаем 400 мБ, парсинг "идет как по маслу", но стоит попытаться обработать файл потяжелее выходит ошибка: "XML Error: XM: Parse error: Недостаточно ресурсов памяти для завершения операции Line 1, Position 2034". Функция XMLtoCursor() выдает это же системное сообщение. Сделала попытку использовать MSXML2.DomDocument.4.0, результат аналогичный до 400 мБ все замечательно, после: "Error - 2147024882", то есть насколько я понимаю по Сейчас приходится "разрывать" большие XML "руками", с помощью "FirstObject XML Editor" на файлики до 400 мБ, пакетом обрабатывать и получившиеся курсоры грузить на сервер МуSQL для дальнейшего использования, дальше с информацией на сервере проблем не возникает. ФНС грозиться в следующем году прекратить обновление КЛАДР. Может кто-то нашел более креативное решение для данной проблемы, один раз конечно можно тихо матерясь переколотить данные нескольких регионов руками, но это как-то не рационально ------------------ |
Re: Большой XML | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
А сразу в MySql распарсить.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Большой XML | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
А почему нельзя один раз написать программку на Фоксе, разбивающую текстовый файл на части допустимого размера, а далее каждую часть той же программкой "прекрасно переводить в DBF с помощью класса XMLAdapter"? |
Re: Большой XML | |
---|---|
Казакова Сообщений: 3 Дата регистрации: 10.08.2022 |
Рецепт в студию. |
Re: Большой XML | |
---|---|
Казакова Сообщений: 3 Дата регистрации: 10.08.2022 |
Подскажите как не вижу рецепта. Если Вы предполагаете использование конструкции INSERT INTO &LODBF values(STREXTRACT(stroka,"<",">")), то нужно предварительно разбить файл на строки, методом подстановки CHR(13) между тэгами, у меня из подходящего инструментария только редактор AkelPad, но и ему гектарный файл "не по зубам". Кстати после этого класс XMLAdapter использовать будет невозможно, придется расписывать конкретное распознание. Лисичка меня кормит с 1994 года, как говорится: "Моя пропадала везде" Исправлено 1 раз(а). Последнее : Казакова, 11.08.22 04:40 |
Re: Большой XML | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
stackoverflow-com.translate.goog stackoverflow.com www.google.ru ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Большой XML | |
---|---|
dimag Сообщений: 464 Откуда: Одинцово Дата регистрации: 17.12.2002 |
Все уже сделано за нас: Загрузка ФИАС в БД на MSSQLSERVER подручными (SQLXMLBULKLOAD) средствами habr.com ------------------ Глупость - это не отсутствие ума, это такой ум. |
Re: Большой XML | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Это не MySql ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Большой XML | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Нет. Программа должна просто разбить один большой XML на несколько XML файлов, которые будут иметь размер, нормально обрабатываемый XML-адаптером. То есть она сделает то же самое, что вы делали руками с помощью FirstObject XML Editor, если я правильно понял. Для примера я скачал файл AS_HOUSES.xml, посмотрел структуру <?xml version="1.0" encoding="utf-8"?> <HOUSES> <HOUSE параметры /> ... </HOUSES> Допустим, он очень большой и надо разбить его на несколько файлов подходящего для дальнейшей обработки размера. Каждая часть должна иметь ту же структуру, но количество записей <HOUSE параметры /> в ней должно быть уменьшено, чтобы часть в целом не превышала ваш максимальный размер. Работаете с XML-файлом функциями низкого уровня (FOPEN() и т.п). Читаете в цикле файл функцией FREAD() кусками максимального допустимого размера и пишете выходные файлы функцией FWRITE(). Каждая часть должна состоять из: 1) заголовка <?xml version="1.0" encoding="utf-8"?> <HOUSES> 2) записей <HOUSE параметры /> 3) футера </HOUSES> Поэтому сразу пишете стандартный заголовок. Затем в цикле читаете исходный файл, начиная с первой записи <HOUSE параметры />, кусками максимального допустимого размера (кажется, это 65 Kb), проверяя на каждом проходе общий размер генерируемой части на тот максимум, который может обработать XMLAdapter. Если очередная порция не может быть записана в выходной файл целиком, то находите в ней конец текущей записи <HOUSE параметры /> (ведь предыдущий кусок мог закончиться где-то в середине записи), дописываете его, а затем и футер - получили первую (очередную) часть исходного XML. Затем подобным же образом формируете следующую часть, не забывая после заголовка сначала записать остаток предыдущего прочитанного куска исходного файла. И так далее, пока исходный файл не кончится. На выходе вы получаете вместо одного большого XML несколько нормальных правильных XML - HOUSE_001.xml, HOUSE_002.xml и т.д. Все прочие XML-файлы (а их по 18 в каждой папке) имеют аналогичную структуру: <ITEMS> <ITEM /> </ITEMS> <ROOMS> <ROOM /> </ROOMS> и т.д. а значит, программа может быть универсальной и автоматически обрабатывать любой из них, основываясь на имени второго тега (HOUSES, ITEMS, ROOMS и т.д.). В принципе алгоритм чтения исходного файла может быть и другим, но предложенный, я полагаю, будет наиболее быстрым. Исправлено 7 раз(а). Последнее : akvvohinc, 12.08.22 01:27 |
Re: Большой XML | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> указывать код ФИАС. ФНС распространяет систему ГАР ФИАС исключительно в формате XML.
Ничего не сделаете результативного с XML штатным образом (преобразованием в DOM) Если в VFP, то только только рукопашное распарсивание (поиск тэгов в буфере, при линейном чтении), или использование не DOM-обьекта всего XML, а последовательное чтение тэгов, виндовый XMPHTTP-обьект это умеет, есть упоминание на этом форуме (забыл название этого механизма... Эх! не ИК!) () Если принять многогиговый ФИАС может 1С, то флаг ему в руки. Я просто скачать не смог полный ФИАС... () изобретателей формата ФМАС - в топку Исправлено 1 раз(а). Последнее : of63, 13.08.22 19:06 |
© 2000-2024 Fox Club  |