在 Rails 中使用 Nokogiri 解析 XML 以比较数据库 table
Parse XML using Nokogiri in Rails to compare a database table
我有一个名为 "users" 的 table,它有三列:
id, ref, name
我想使用 Nokogiri 解析以下 XML 文档,并通过比较 "users" table 记录中的值列出匹配和不匹配的记录:
<?xml version="1.0" encoding="UTF-8"?>
<EXPORT>
<DETAIL>
<ID>150</ID>
<REF>188440</REF>
<USER>Bruce</USER>
</DETAIL>
<DETAIL>
<ID>1501003</ID>
<REF>1884402</REF>
<USER>Alice</USER>
</DETAIL>
</EXPORT>
例如:
Users.where(id: 1501003).name
Users.where(ref: 188440).name
通过比较 id
和 ref
找到 name
。
注意:如果id
不匹配,则与ref
比较。如果 id
匹配则忽略 ref
.
我试过了:
doc = Nokogiri::XML(File.open(self.filename))
exp = "//EXPORT/DETAIL"
NODES = doc.xpath(exp)
nodes.each do |node|
unless node.text.nil?
User.where(id: node.text).first.name
end
我想知道您为什么要使用 Nokogiri 从 XML 中的数据库转储中进行查找。这看起来非常尴尬,而且是一个非常缓慢和脆弱的解决方案。
数据库 XML 转储很容易超出可用 RAM,使您的计划不可行。使用 SAX 解析器可能会有所帮助,但解决方案仍然存在问题。参见“What is the XY problem?”。
- 如果数据已经在数据库中,则搜索它并select您需要的记录。
- 如果不是,并且您想找到要加载的记录,则将数据加载到单独的 table 和 select 所需的记录中,然后将它们插入到主控中。
我有一个名为 "users" 的 table,它有三列:
id, ref, name
我想使用 Nokogiri 解析以下 XML 文档,并通过比较 "users" table 记录中的值列出匹配和不匹配的记录:
<?xml version="1.0" encoding="UTF-8"?>
<EXPORT>
<DETAIL>
<ID>150</ID>
<REF>188440</REF>
<USER>Bruce</USER>
</DETAIL>
<DETAIL>
<ID>1501003</ID>
<REF>1884402</REF>
<USER>Alice</USER>
</DETAIL>
</EXPORT>
例如:
Users.where(id: 1501003).name
Users.where(ref: 188440).name
通过比较 id
和 ref
找到 name
。
注意:如果id
不匹配,则与ref
比较。如果 id
匹配则忽略 ref
.
我试过了:
doc = Nokogiri::XML(File.open(self.filename))
exp = "//EXPORT/DETAIL"
NODES = doc.xpath(exp)
nodes.each do |node|
unless node.text.nil?
User.where(id: node.text).first.name
end
我想知道您为什么要使用 Nokogiri 从 XML 中的数据库转储中进行查找。这看起来非常尴尬,而且是一个非常缓慢和脆弱的解决方案。
数据库 XML 转储很容易超出可用 RAM,使您的计划不可行。使用 SAX 解析器可能会有所帮助,但解决方案仍然存在问题。参见“What is the XY problem?”。
- 如果数据已经在数据库中,则搜索它并select您需要的记录。
- 如果不是,并且您想找到要加载的记录,则将数据加载到单独的 table 和 select 所需的记录中,然后将它们插入到主控中。