gpt4 book ai didi

mysql - 将 XML 文件数据填充到 Rails 中的数据库

转载 作者:行者123 更新时间:2023-11-29 00:59:45 25 4
gpt4 key购买 nike

为了处理一些客户端信息,我一直在使用 hpricot 解析一个 3MB 的 XML 文件...但是 hpricot 需要花费相当多的时间来定期解析该文件。

我正在考虑将这些数据填充到 MySql 数据库(每周一次),这样我就可以使用 rails 直接在 mysql 上处理这些数据。

该文件基本上是一个 XML 谷歌联系人文件,其中包含客户信息:姓名、电子邮件、备注......但也有一些联系人包含多个值字段,例如地址、电话。

当前,当我解析数据时,我生成了一个 Contact 类

class Contact <
Struct.new(:name, :email, :telephones, :addresses, :user_address,:notes)
end

telephonesaddresses 包含一个具有不同值的数组。

我想如果我想在 mysql 数据库中重新创建这个结构,我需要创建三个表:联系人、电话和地址...

class Contact < ActiveRecord::Base
has_many :addresses
has_many :telephones
end

class Telephone < ActiveRecord::Base
belongs_to :contact
end

class Address < ActiveRecord::Base
belongs_to :contact
end

您将如何将Contact 类 数据填充到数据库表中?有没有办法将数据直接从 XML 文件插入到数据库表中?

任何建议和指导将不胜感激:)谢谢!

最佳答案

首先为什么不试试 nokogiri 看看它是否更快?

Rails 认为人们的最佳实践,他们开始相信对于任何给定的问题应该如何编程都有一个秘诀。不幸的是,情况并非如此,对于通常的 90% 的任务来说,没有魔法。

因此,如果您有一些地址和一些电话的联系人,那就是这样。

这是我的做法:

解析XML文件,如果文件太大,流式解析。
对于其中的每个联系人输出一个散列,就像 params[:contact] 通常会在提交表单后在 Controller 中出现,并让 Contact 模型使用 accepts_nested_attributes_for .

contact = {
:name => xxx,
:user_address => xxx,
:notes => xxx
:addresses_attributes => [
{:some_attribute => xxx, :some_other_attribute => xxx}
...
],
:telephones_attributes => [
{ :some_attribute => xxx, :some_other_attribute => xxx}
...
]
}

现在剩下的就是:

Contact.create(contact)

关于mysql - 将 XML 文件数据填充到 Rails 中的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com