本站消息

  本站每日ip已达10000,出租广告位,位置价格可谈,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

将大型XML文件转换为关系数据库

发布于2019-09-11 19:40     阅读(283)     评论(0)     点赞(9)     收藏(0)


我正在努力找出实现以下目标的最佳方法:

  1. 每天从第三方网站下载大型XML(1GB)文件
  2. 将该XML文件转换为我的服务器上的关系数据库
  3. 添加搜索数据库的功能

对于第一部分,这是需要手动完成的事情,还是可以用cron完成?

与XML和关系数据库相关的大多数问题和答案都是指Python或PHP。这可以用javascript / nodejs完成吗?

如果这个问题更适合不同的StackExchange论坛,请告诉我,我会把它移到那里。

下面是xml代码的示例:

<case-file>
  <serial-number>123456789</serial-number>
    <transaction-date>20150101</transaction-date>
      <case-file-header>
       <filing-date>20140101</filing-date>
      </case-file-header>
      <case-file-statements>
       <case-file-statement>
        <code>AQ123</code>
        <text>Case file statement text</text>
       </case-file-statement>
       <case-file-statement>
        <code>BC345</code>
        <text>Case file statement text</text>
       </case-file-statement>
     </case-file-statements>
   <classifications>
  <classification>
   <international-code-total-no>1</international-code-total-no>
   <primary-code>025</primary-code>
  </classification>
 </classifications>
</case-file>

以下是有关如何使用这些文件的更多信息:

所有XML文件都采用相同的格式。每条记录中可能有几十个元素。这些文件每天由第三方更新(并在第三方网站上以压缩文件的形式提供)。每天的文件代表新的案例文件以及更新的案例文件。

目标是允许用户搜索信息并在页面上(或在生成的pdf / excel文件中)组织这些搜索结果。例如,用户可能希望查看包含<text>元素内特定单词的所有案例文件或者用户可能希望查看包含主代码025(<primary-code>元素)的所有案例文件以及在特定日期(<filing-date>元素)之后提交的案例文件

输入数据库的唯一数据来自XML文件 - 用户不会将任何自己的信息添加到数据库中。


解决方案


所有步骤当然可以使用node.js有一些模块可以帮助您完成以下每项任务:

    • node-cron:允许您在节点程序中轻松设置cron任务。另一个选择是在您的操作系统上设置一个cron任务(为您喜欢的操作系统提供大量资源)。
    • 下载:模块可以轻松地从URL下载文件。
  1. xml-stream:允许您流式传输文件并注册解析器遇到某些XML元素时触发的事件。我已成功使用此模块来解析KML文件(授予它们比文件小得多)。

  2. node-postgres:PostgreSQL的节点客户端(我确信有许多其他常见RDBMS的客户端,PG是我迄今为止唯一使用过的客户端)。

这些模块中的大多数都有很好的例子可以帮助您入门。以下是您可能设置XML流媒体部分的方法:

var XmlStream = require('xml-stream');
var xml = fs.createReadStream('path/to/file/on/disk'); // or stream directly from your online source
var xmlStream = new XmlStream(xml);
xmlStream.on('endElement case-file', function(element) {
    // create and execute SQL query/queries here for this element
});
xmlStream.on('end', function() {
    // done reading elements
    // do further processing / query database, etc.
});


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/108045/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

9 0
收藏该文
已收藏

评论内容:(最多支持255个字符)