Загрузка xml в БД организации
Можно ли каким-либо образом организовать загрузку поступающих XML в нашу БД?
Загрузку xml в БД можно организовать следующим образом:
1. При помощи модуля XSLTransform преобразовать XML в SQL скрипт
2. С использованием модуля ExtProg вызвать внешнюю программу – утилиту работы с СУБД, которая используя сформированный SQL добавит данные
Рассмотрим на примере поступающих извещений IZVTUB (440П):
<?xml version="1.0" encoding="WINDOWS-1251"?>
<Файл ТипИнф="ИЗВЦБКОНТР" ТелОтпр="(495) 123-45-67" ВерсПрог="БИНГО 3.12.01" ФамОтпр="Иванов" ДолжнОтпр="оператор" ИдЭС="6F961911-8B86-D011-B42D-00CF4FC994FF" ВерсФорм="3.00">
<ИЗВЦБКОНТР КодРезПроверки="73" ДатаВремяПроверки="2015-06-17T09:30:47" ИмяФайла="AFN_0000000_MIFNS00_20171005_00001" Пояснение="ошибка проверки"/>
</Файл>
Создадим для преобразования XML в SQL файл преобразования izvtub2sql.xslt следующего содержания:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output version="1.0" method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:apply-templates select="/*"/>
</xsl:template>
<!-- generate INSERT STATEMENT -->
<xsl:template match="Файл">
insert into IZVTUB (IZV_FILENAME,IZV_DATE,IZV_RESULT,IZV_TEXT)
values(
'<xsl:value-of select="ИЗВЦБКОНТР/@ИмяФайла"/>',
'<xsl:value-of select="ИЗВЦБКОНТР/@ДатаВремяПроверки"/>',
'<xsl:value-of select="ИЗВЦБКОНТР/@КодРезПроверки"/>',
'<xsl:value-of select="ИЗВЦБКОНТР/@Пояснение"/>');
</xsl:template>
</xsl:stylesheet>
Будем считать что наша БД работает под управлением Firebird и хранится в C:\DB\test.fdb
Файл izvtub2sql.xslt поместим в каталог .\XSLT\ и напишем сценарий обработки:
[Section01]
Source=C:\IZVTUB
Result=C:\IZVTUB\DONE
Mask=IZV*.xml
run0_XSLTransform=.\XSLT\izvtub2sql.xslt .\FILES\sql .sql
[Section02]
Source=.\FILES\sql
noResult=1
Mask=IZV*.sql
run0_extprog=isql C:\DB\test.fdb -u sysdba -p masterkey -i %FILE%
Поместим в C:\IZVTUB поступившие IZVTUB*.xml и обработаем используя наш сценарий.
В соответствии с первой секцией файлы IZV*.xml будут преобразованы в IZV*.xml.sql, при этом исходные IZV*.xml будут переложены в каталог обработанных – C:\IZVTUB\DONE, а сформированные sql будут выложены в .\FILES\sql
В итоге для приведенного выше IZVTUB получим sql следующего содержания:
insert into IZVTUB (IZV_FILENAME,IZV_DATE,IZV_RESULT,IZV_TEXT)
values(
'AFN_0000000_MIFNS00_20171005_00001',
'2015-06-17T09:30:47',
'73',
'ошибка проверки');
вторая секция исполнит скрипт и добавит в БД запись с информацией о поступившем файле.