Как конвертировать xml в dbf
Convert XML file to DBF
I’m trying to convert an XML file to DBF. Right now I do this manually, opening the XML file in Excel 2003 and saving it as a DBF 4 file type. This is a boring and time consuming process, made worse by the fact that neither Office 2007, nor Office 2008 for Mac allow saving as DBF any more.
I’d like a way to automate this, if possible. Do you know any way of actually doing this? I don’t even know what programming language to use for this.
4 Answers 4
Use a XmlReader, format your data and use OleDb to save to a dbf file. Here you can find a connectionstring for dbf: www.connectionstrings.com
Visual FoxPro has a command XMLTOCURSOR() that converts XML to a Visual FoxPro cursor. This cursor can be transformed into a disk-based DBF using the COPY TO command.
One caveat, the complexity of the XML might force a different approach with XMLAdapter, especially if there is hierarchical (nested) XML. The XMLAdapter in Visual FoxPro 9 has enhancements to deal with this format.
If opening the XML file in Excel 2003 and saving it as a DBF 4 file type works you what than may you should just emulate this process via a program. There are at least two approaches:
1) VBA running whithin Excel:
The other approach is using VBA which runs within Excel and automates the stuff you do manually. To get a feeling for it. You could run the Macro recorder and do the transformation once manually again. Afterwards you see the VBA code which emulates the things you are doing. With little tweaking you should be able to automate the whole process.
2) External Application: Basically you create an excel object in a separate Windows Application which encapsulates Excel and you do the stuff you would do manually via this object remotely.
Import any XML to DBF
Probably you often need to convert an XML file or a folder with XML files into one or several DBF files. The problem is that the XML structure, its hierarchy and nesting levels differ from file to file. In this article, we’ll take a detailed look on how to import an XML file of ANY structure to a flat DBF table.
A new feature called Import Custom XML was implemented in DBF Commander Professional version 2.7 (build 40). This command is available via the command line interface. The syntax is as follows:
As you can see, there are four parameters:
DBF fields definition, or How to create a map-file
It is always better to learn something by using an example. In our situation, we need some well-known XML. Let’s take an RSS news feed XML file (available here):
Suppose that each element should be represented as one row in the resulting DBF file. So our file will contain four records.
Click OK. The DBF file will be created, and now it can be used as a resulting file for our import from the XML process. You can use any available field types: Character, Integer, Numeric, Date, etc.
To create a map-file based on the resulting file, click the Export Structure tool button (see the picture above). When the Save dialog opens, choose the path and filename, and then save the structure as a DBF file.
Matching XML tags to DBF fields
We have to do one more thing yet: define the XML tags that should be inserted in the fields of the resulting DBF file.
Now fill every row of the new «xmltagname» field with the XML nodes path (separated by «->«) that should be inserted into the corresponding field in the DBF file:
Well, that’s all. Now we can run the import from XML to DBF itself. Execute the following command from the command line, or from a BAT file:
As a result, we’ll get the new file «D:\dbf\rss.dbf» that contains the imported XML data:
You can download all the files used in this conversion from here.
Конвертер XML to DBF
Скачать файлы
Специальные предложения
Обновление 02.07.14 19:39
Код открыт Не указано
См. также
Навигатор по конфигурации базы 1С 8.3 Промо
Универсальная внешняя обработка для просмотра метаданных конфигураций баз 1С 8.3. Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д. Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы. Отображает структуру хранения объектов базы данных, для регистров доступен сервис «Управление итогами». Платформа 8.3, управляемые формы. Версия 1.1.0.87 от 02.12.2021
28.10.2018 46670 422 ROL32 72
Управление платформенными обработками (расширение для типовых) [update 8.3.20]
Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить «Активные пользователи» или доработать «Конструктор запросов».
07.10.2021 4145 7 SeiOkami 24
Работа с картами в 1С на примере бесплатной библиотеки Leaflet
Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.
31.03.2021 11550 36 Parsec1C 14
Универсальная обработка переноса данных из основной конфигурации в расширение
Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.
05.10.2020 11066 67 biz-intel 71
Удаление и/или копирование сохраненных в 1С настроек (например настроек печати табличных форм) Промо
Иногда нужно удалить сохраненную в 1С «покореженную» настройку или скопировать «удачную» другому пользователю.
01.09.2012 67727 1383 AnryMc 46
Улучшенная обработка универсального обмена данными в формате XML (УФ)
Улучшенная обработка «Универсальный обмен данными» с полноценными возможностями СКД для выборки данных (не только для отборов).
23.06.2020 13704 144 Lem0n 1
Панель #Расширение объекта: Редактор, Права, Поиск, Сторно, Обмен
Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.
01.05.2020 15806 113 sapervodichka 1
Яндекс сервисы [Расширение]
Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)
24.10.2019 16109 11 noprogrammer 12
Групповая корректировка записей регистров (Управляемое приложение) v 2.1 Промо
Обработка предназначена для групповой корректировки записей регистров Накопления, Сведений и Бухгалтерии. Разработана специально для Управляемого приложения.
06.09.2013 69510 330 kser87 59
Работа с файлами (обычная и управляемая форма)
Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!
10.06.2019 43112 232 Xershi 77
Электронная таблица средствами 1С (Версия 2.0)
Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.
23.04.2019 24391 81 user706545_kseg1971 40
Как конвертировать xml в dbf
Вопрос действительно интересный! 🙂 Схема получения dbf-таблиц могла бы быть следующей:
Итак, попробуем пройти все шаги, разбирая конкретный пример данных в MS Excel 2003. Допустим, что требуется получить dbf- таблицы для данных, которые в MS Excel выглядят так:
По этим данным, требуется получить три VFP- таблицы связанные отношениями:
Экспорт данных Excel- таблицы в xml- файл
при этом, на возникший запрос о несоответствии формата следует ответить утвердительно. После чего мы получим файл с данными таблицы в xml- формате примерно такой структуры:
здесь незначимая для нас информация упущена и оставлено только то, что нам необходимо для дальнейшей работы. Обратите внимание на следующие моменты:
Удаление «области имён по умолчанию»
Признаки отбора «прикладных данных»
Относительно «признаков выбора», требуемых нам «прикладных данных», глядя на содержимое полученного xml- файла, можно заметить следующее:
Далее, мы постараемся воспользоваться этими обстоятельствами, чтобы организовать обработку данных с помощью XSLT- преобразования.
XSLT- преобразование из «плоского» XML в «структурированный», согласно группировки данных
Здесь предполагается, что во входном потоке отсутствуют «разрывы» в смысле групп/подгрупп. Т.е. данные во входном потоке упорядочены в строгом соответствии с требованиями группировок, а также и то, что во входном потоке нет данных, не принадлежащих ни группам, ни их подгруппам. Основная трудность в реализации этой схемы заключается в проверке условий на момент открытия новой группы/подгруппы, позволяющих ответить на вопрос: а есть ли ранее открытые аналогичные группы/подгруппы, которые следует закрыть при открытии новых?
При вышеупомянутых предположениях ответ на этот вопрос достаточно прост:
Преобразование XML в DBF
Если СокрЛП(ОсновнойНод)=»» Тогда
Сообщить(«Введите основной нод!»,СтатусСообщения.Внимание);
Возврат;
КонецЕсли;
//Основная процедура
Процедура КонвертироватьИзXMLВDBF(ПутьКФайлу)
//формируем дерево значений из XML
ФайлXML = Новый ЧтениеXML;
Попытка
ФайлXML.ОткрытьФайл(ПутьКФайлу);
Исключение
Сообщить(«Файл не открывается: «+ПутьКФайлу,СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ДеревоXML = Новый ДеревоЗначений;
ДеревоXML.Колонки.Добавить(«ИмяУзла»);
ДеревоXML.Колонки.Добавить(«Значение»);
//инициализируем отбор по основному ноду
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить(«ИмяУзла», ВРЕГ(СокрЛП(ОсновнойНод))); // основной нод данных
НайденныеСтроки = ДеревоXML.Строки.НайтиСтроки(ПараметрыОтбора,Истина);
Если НайденныеСтроки.Количество()=0 Тогда
Возврат;
иначе
//идентифицируем поля
ДБФ= Новый XBase;
ДБФ.Кодировка=КодировкаXBase.OEM;
//ДБФ.поля.Добавить(«S_POL»,»C»,80);
тзПоля = Новый ТаблицаЗначений;
тзПоля.Колонки.Добавить(«ИмяПоля»);
тзПоля.Колонки.Добавить(«ТипПоля»);
тзПоля.Колонки.Добавить(«ДлинаПоля»);
тзПоля.Колонки.Добавить(«ДлинаПоля2»);
Для каждого СтрДер Из НайденныеСтроки Цикл
СтруктураДанных = Новый Структура();
СтруктураДанных = ПолучитьСтруктуруКоллекцииСтрокДереваXML(СтруктураДанных,СтрДер.Строки,Истина,,Истина);
Для каждого стр Из СтруктураДанных Цикл
НайдСтр = тзПоля.Найти(стр.Ключ,»ИмяПоля»);
Если НайдСтр=Неопределено Тогда
НовСтр = тзПоля.Добавить();
НовСтр.ИмяПоля = стр.Ключ;
//Для каждого стр Из ДеревоXML.Строки Цикл
//
// ЭлементыФормы.ДеревоXML.Развернуть(стр,Истина);
//
//КонецЦикла;
Функция ЕстьЧтоЧитать(ФайлXML)
Если ФайлXML.Прочитать() Тогда
Возврат Истина;
Иначе
//Предупреждение(«Файл прочитан полностью!»);
Возврат Ложь;
КонецЕсли;
КонецФункции
Функция ПолучитьСтруктуруКоллекцииСтрокДереваXML(СтруктураДанных,СтрокиДанных,НаследоватьРодителя=Ложь,Родитель=»»,ДляДБФ=Ложь) Экспорт
Для каждого стр Из СтрокиДанных Цикл
Если стр.Строки.Количество()>0 Тогда
//вложенные ноды
СтруктураДанных = ПолучитьСтруктуруКоллекцииСтрокДереваXML(СтруктураДанных,стр.Строки,НаследоватьРодителя,стр.ИмяУзла,ДляДБФ);
КонецЕсли;
Процедура ПрочитатьАтрибутыУзлаXML(файлXML,СтрокиДерева)
Пока файлXML.ПрочитатьАтрибут() Цикл
СтрокаДерева = СтрокиДерева.Добавить();
СтрокаДерева.ИмяУзла = файлXML.Имя;
СтрокаДерева.Значение= файлXML.Значение;
//СтрокаДерева.Картинка = БиблиотекаКартинок.Свойства;
КонецЦикла;
КонецПроцедуры
Функция ВыбратьФайлXML() Экспорт
Режим=РежимДиалогаВыбораФайла.Открытие;
ВыбратьФайл = Новый ДиалогВыбораФайла(Режим);
Фильтр = «Файлы XML | *.xml»;
ВыбратьФайл.Фильтр=Фильтр;
ВыбратьФайл.Заголовок = «Выберите файл XML»;
Если ВыбратьФайл.Выбрать() Тогда
Возврат ВыбратьФайл.ПолноеИмяФайла;
Иначе
Сообщить(«Файл не выбран!»);
Возврат «»;
КонецЕсли;