在 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

通过比较 idref 找到 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 所需的记录中,然后将它们插入到主控中。