将大量数据从XML文件转换为数据库

时间:2019-04-23 21:48:19

标签: mysql xml xpath

有一个子系统可以为每个评估请求生成XML数据文件。该XML文件可能包含大约1000个字段的数据。每个月至少产生10000个XML数据文件。这些文件在文件服务器上生成,并使用文件系统文件夹进行结构化。请参见下面的快照中的示例:

enter image description here

从一个文件到另一个文件的XML结构可能有所不同,因为数据输入规范会随着时间而变化。

在某些表中,并非所有字段都需要进入数据库,只有某些字段才需要访问数据库,至少约200个字段需要进入数据库。例如,XML的数据说明了“联系人详细信息”和“可比较详细信息”。因此,对于编号为123的评估请求,我们将在一个联系人表中插入一条联系人信息记录,在可比较表中插入一条记录可比较信息。

问题:是否可以通过MySQL或SQL Server连接以直接通过文件系统读取XML文件?是否有一些中间子系统或连接器使此过程成为可能。然后,在访问XML文件之后,可以将其转换为表格格式并使用常规查询提取字段及其值吗?

当前,我们正在使用ASP.NET和Java开发程序来访问文件系统,查询XML数据文件(使用文件系统API),一次处理每个文件,将XML数据文件转换为XML文档,使用XPath获取字段和值,并基于某些映射连接到数据库(确定XML元素将保存在哪里,即,在哪个数据库/表/列中),并生成插入SQL并执行以插入指定表中的记录。

enter image description here

我只是想知道是否有更简单的方法?

1 个答案:

答案 0 :(得分:1)

使用Saxon,您可以在单个XSLT脚本中完成此操作:

(a)使用collection()函数,您可以访问目录中的所有XML文件,并对每个文件进行相同的处理

(b)具有Saxon的sql:insert扩展名,您可以将新行写入关系数据库。

这肯定会比您的编码方式少很多,尽管性能可能不会有很大不同(取决于Java代码的性能)。

如果您对Saxon-EE进行投资,则可能会获得性能优势,因为collection()函数是自动多线程的,因此它将利用多个内核。

[免责声明:Saxon由我公司开发]