将 XML 文档导入 Rails 数据库?

2023-12-06

我一直在阅读一个又一个的教程,但似乎没有什么对我有用。目标是获取包含元素和属性的 XML 文档并将数据插入数据库中。每个元素/属性将是数据库中的一列,每个条目是一行。这是我一直在使用的虚构 XML 文档:

<?xml version="1.0"?>
<library>
  <NAME><![CDATA[Favorite Books]]></NAME>
  <book ISBN="11342343">
    <title>To Kill A Mockingbird</title>
    <description><![CDATA[Description#1]]></description>
    <author>Harper Lee</author>
  </book>
  <book ISBN="989894781234">
    <title>Catcher in the Rye</title>
    <description><![CDATA[This is an extremely intense description.]]></description>
    <author>J. D. Salinger</author>
  </book>
  <book ISBN="123456789">
    <title>Murphy's Gambit</title>
    <description><![CDATA[Daughter finds her dad!]]></description>
    <author>Syne Mitchell</author>
  </book>
</library>

所以我想要一个包含 2 个条目的表,每个条目都有一个 ISBN、标题、描述和作者。这就是基础知识。 (我想 CDATA 是完全可选的。如果这是我问题的一部分,那么无论如何让我们摆脱它......)

最终目标有点复杂。多个图书馆,拥有多本书。数据库之间存在关系,因此我可以从图书数据库引用图书馆数据库,反之亦然。我完全迷失了,绝对是一个菜鸟,但我有很好的计算机知识,并且愿意测试和尝试。

我使用 Rails 3.2.6 和默认的 SQLite3 数据库 (3.6.20)。我已经安装了 REXML、ROXML、LibXML 等,并通读了 API 和演练,但事情并不顺利。必须有一种简单的方法将 XML 文档转换为带有 Book 对象(具有 .title、.author、.isbn 和 .description 方法)的 Library 对象(具有 .name 方法)。

非常感谢任何帮助!

Update!

好的,下一个问题。我一直在研究这背后的逻辑,并想知道执行以下操作的最佳方法......

假设我有这个新的、改进的 XML 文件。

<?xml version="1.0"?>
<RandomTag>
  <library name='Favorite Books'>
    <book ISBN="11342343">
      <title>TKAM</title>
      <description>Desc1</description>
      <author>H Lee</author>
    </book>
    <book ISBN="989894781234">
      <title>Catcher in the Rye</title>
      <description>Desc2</description>
      <author>JD S</author>
    </book>
  </library>
  <library name='Other Books'>
    <book ISBN="123456789">
      <title>Murphy\'s Gambit</title>
      <description>Desc3</description>
      <author>Syne M</author>
    </book>
  </library>
</RandomTag>

现在我们有两个图书馆,第一个图书馆名为“最喜欢的书籍”,有两本书,第二个图书馆名为“其他书籍”,只有一本书。

让每本书知道它属于哪个图书馆的最佳方法是什么?最初,我创建了一个图书馆数据库和一个图书数据库。每个 Book 对象都有一个library_id 字段,它引用了正确的图书馆。因此,每个数据库都可以使用“@library.books.each do |b| b.title”之类的语法正确填写。然而,这只在我拥有一个图书馆时才有效。

我尝试将您给我的 Book 循环嵌套在类似的 Library 循环中,但 .css 方法会找到每个匹配项,无论它位于何处。是否有 .css 方法可以找到 UNTIL 特定点?

换句话说,我希望能够将每本书导入到各自的图书馆中。我无法向 XML 文件添加任何字段。

再次感谢。


我做了类似的事情Nokogiri图书馆。

doc = Nokogiri::XML(xml_data)

doc.css('book').each do |node|
  children = node.children

  Book.create(
    :isbn => node['ISBN'],
    :title => children.css('title').inner_text,
    :description => children.css('description').inner_text,
    :author => children.css('author').inner_text
  )
end

Update

您可以通过执行以下操作来创建快速测试:

首先安装 nokogiri gem:

gem install nokogiri

然后创建一个名为 text_xml.rb 的文件,其中包含以下内容:

require 'nokogiri'

doc = Nokogiri::XML('<?xml version="1.0"?>
  <library>
    <NAME><![CDATA[Favorite Books]]></NAME>
    <book ISBN="11342343">
      <title>To Kill A Mockingbird</title>
      <description><![CDATA[Description#1]]></description>
      <author>Harper Lee</author>
    </book>
    <book ISBN="989894781234">
      <title>Catcher in the Rye</title>
      <description><![CDATA[This is an extremely intense description.]]></description>
      <author>J. D. Salinger</author>
    </book>
    <book ISBN="123456789">
      <title>Murphy\'s Gambit</title>
      <description><![CDATA[Daughter finds her dad!]]></description>
      <author>Syne Mitchell</author>
    </book>
  </library>')

doc.css('book').each do |node|
  children = node.children

  book = {
    "isbn" => node['ISBN'], 
    "title" => children.css('title').inner_text, 
    "description" => children.css('description').inner_text, 
    "author" => children.css('author').inner_text
  }

  puts book
end

最后运行:

ruby test_xml.rb

我怀疑你没有转义单引号墨菲的策略当你粘贴到你的xml中时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 XML 文档导入 Rails 数据库? 的相关文章

  • 何时使用node.js、sinatra、rails? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这 3 种语言 框架的最佳用途是什么 混合所有 或 2 个 有用吗 如果您正在构建一个完整的 Web 应用程序 您可能应该使用 Rails 因为
  • 使用 Mechanize (Ruby) 进行基本身份验证和表单身份验证

    我正在尝试登录公司内部网上的一个站点 该站点具有基本身份验证弹出对话框和基于表单的身份验证 这是我正在使用的代码 导致 401 gt Net HTTPUnauthorized 错误 require rubygems require mech
  • 通过 SSL 发布 UTF-8 时,HEROKU 上出现“EOFError:已到达文件结尾”

    我在 heroku 上遇到了奇怪的错误 为了重现它 我必须使用请求正文中的任何 UTF 8 字符制作大的 超过几 KB HTTPS POST 这是一个例子 require net https require uri Accutally I
  • 为什么我需要 Nginx 和 Puma?

    我正在将 Rails 应用程序部署到生产环境中 看起来 Puma 速度很快 可以处理我想要在网络服务器中完成的许多事情 我想知道我是否需要使用 Nginx 如果只使用 Puma 我会错过什么 Nginx 是一个 Web 服务器 puma 是
  • 将 MSBuild 与外部 xml 参数文件结合使用

    如何让 MSBuild 任务使用外部 xml 参数文件中的参数 示例 将外部 xml 文件中的 MyConnectionStringParameter 用于我的 MSBuild 任务 MS构建文件
  • Android:创建具有关系的 SQLite 数据库

    我正在尝试创建一个需要具有一对多关系的两个表 SQLite 数据库的应用程序 基本上 第一个表将允许用户创建一名员工 当他们点击该员工时 他们将进入第二个活动 该活动将允许用户为该员工添加多个电话号码 这些电话号码存储在第二个表中 我真的不
  • 使用 XPath 获取属性

    给定一个像这样的 XML 结构
  • “库例程调用不按顺序” sqlite3_prepare_v2(CREATE TABLE)

    你知道为什么我打电话时会收到 Library Routine Called Out Of Sequence 吗 sqlite3 prepare v2 CREATE TABLE 在空数据库上 我创建一个空数据库 然后打开它 后来我将所有必须写
  • 用于 S3 私有文件的 ActiveStorage

    到目前为止 我一直在使用 Paperclip 将一些文件上传到 S3 其中一些文件不是公开的 Paperclip 允许通过以下位将一些文件作为私有文件上传 has attached file image styles large 2000x
  • Rails 4.1 环境变量未重新加载

    我创建了一个application yml文件在配置目录中并添加了一些键值对 即AWS REGION us east 1 我还添加了以下内容application rb读取文件并更新 ENV 哈希 if Rails env developm
  • 我应该如何使用 alias_method_chain 作为构建方法?

    我正在使用 Ruby on Rails 3 2 13 我想正确使用alias method chain build option name声明 因为我收到一个奇怪的错误 那是 在我的控制器文件中我有 class Articles Comme
  • 在生产环境中使用 Rails 设置 sunspot solr

    我尝试了各种链接 但我似乎找不到关于创建与生产中的 Rails 一起运行的 solr 实例的好资源 我知道您必须为生产设置 solr 服务器 我已经尝试使用 tomcat 设置 solr 但我似乎无法将其链接到 Rails 应用程序 有什么
  • XSLT:如何在“匹配”属性中表示 OR?

    我想对与名称 A 或 B 匹配的元素执行一系列操作 我在想下面类似的事情 但它不起作用
  • 如何检查字符串是否为有效日期

    我有一个字符串 31 02 2010 并想检查它是否是有效日期 最好的方法是什么 我需要一个方法 如果字符串是有效日期 则返回 true 如果不是 则返回 false require date begin Date parse 31 02
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • 从数组中删除空白元素

    当我从 ruby on Rails 表单中保存多个选择时 它似乎在前面添加了一个空白元素 我该如何删除它 该字段为 selected player utf8 gt authenticity token gt H8W7qPBezubyeU0a
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 子域中的 Rails url 助手 - 删除子域

    我网站上的用户可以拥有子域 例如 他们的页面网址是 name example com 登录的用户可以查看更多用户信息 因此在用户的显示页面上 我有一个使用以下代码生成的链接 user url user subdomain gt false
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • SQLite-Net 扩展 - GetAllWithChildrenAsync 未提取所有内容

    我正在尝试使用 SQLite Net 扩展来创建关系数据库 我在尝试从数据库中提取 Term 对象时遇到了问题 它成功地撤回了其关联的课程 但未撤回与课程关联的评估和笔记 我不确定问题是否在于如何将对象插入数据库 如何从数据库中提取对象 或

随机推荐

  • java.lang.NoSuchMethodError: 没有静态方法 getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;

    我将 Android Studio 更新到 2 2 我的项目将不再构建 我的 Activity 的 super onCreate savedInstanceState 给了我一个错误 java lang NoSuchMethodError
  • 了解 docker 层和未来的变化

    So 每个 Docker 映像都会引用代表文件系统差异的只读层列表 各层相互堆叠 形成容器根文件系统的基础 and 因为每个容器都有自己的薄可写容器层 所有更改都存储在这个容器层中 这意味着多个容器可以共享访问 to the 相同的底层图像
  • 如何在浏览器中“要求”CommonJS 模块? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在浏览器中将 CommonJS 模块加载为客户端 JavaScript 代码的最佳方法是什么 CommonJS模块将其功能放在module exports命名空间 通常包含在使用requi
  • 代码可以交互工作,但不能在编织时工作

    我有一个 RMarkdown 文档 其中包含一些 R 代码 当我在控制台中以交互方式运行该代码时 该代码运行良好 但是 当我尝试编织文档 使用 RStudio 中的 编织 按钮 时 R 会抛出无法找到某些对象的错误消息 当您编译文档时 使用
  • 在 Windows 上编译错误 C2131 和 C3863,但在 Linux 上则不然 [重复]

    这个问题在这里已经有答案了 我有一段代码可以在 Linux Raspbian 上编译并正常工作 但不能在 Windows VS 17 上编译 我使用 CMAKE 3 进行跨平台编译 就像我说的 我在 Linux 上构建它没有问题 以下是我使
  • 通过 WebRTC 流对实时 PCM 音频数据进行未压缩、未加密、未更改、原始传输

    我正在转移一个live使用 WebRTC 的 2 个 Electron 窗口进程之间的音频流 没有 ICE 或 STUN 服务器 或类似的东西 连接是通过 Electron IPC 通信手动建立的 基于这段代码 注意 从有关音频流本身的技术
  • 是否能保证线程在 aspnet 中完成?

    我在 aspnet 中有这个简单的代码 假设没有异常 文件锁定或进程终止 new Thread gt Thread sleep 15000 GC Collect File Write dummy file Start GC Collect
  • 想要检测浏览器关闭事件?

    我正在开发任何需要检测用户是否关闭选项卡或浏览器的应用程序 以便我可以将用户与其他用户断开连接 基本上它是一个聊天应用程序 我用过 window onbeforeunload confirmExit function confirmExit
  • 自定义分类 - 根据角色或能力设置访问权限

    我刚刚学习 WordPress 的自定义分类法 如何限制我的用户使用分类法的访问权限 例如 我创建了一个名为featured我只希望编辑及以上角色能够向此分类添加帖子 如何设置访问级别 无论是基于用户角色还是能力 两者都适合我 这是我用于分
  • URL 中的日期 dd/mm/yyyy

    我在 URL 中传递一个日期 dd mm yyyy 格式如下 http www website com parameter 20 02 2000 我正在使用以下 PHP 将其转换为 YYYY MM DD 格式 我的数据库如下 SELECT
  • Python Curses - 打印 Ascii 艺术

    我有一个很长的多行 ascii art 字符串 我想使用 Pythoncurses 模块将其呈现给用户 我对此有点困惑 因为在curses中打印字符串的唯一方法是addstr y x string 它只打印到一行 关于如何实现这一点有什么想
  • 如何在JPA中实现复杂的多对多关系?

    这里是数据库架构 CREATE TABLE Products id INT NOT NULL AUTO INCREMENT category id INT NOT NULL description VARCHAR 100 price DEC
  • 如何从多个匹配对象中删除数组中的单个对象

    var testarray NSArray testarray 1 2 2 3 4 5 3 print testarray testarray removeObject 2 我想从多个匹配对象中删除单个对象 例如 myArray 1 2 2
  • 实时编辑用户输入

    是否可以自动插入字符EditText 当用户输入数据时 IE 如果用户输入一个长数字 例如123456789012 这个数字是否有可能在他在编辑文本框中键入时出现 但每 4 个字符有一个破折号 因此 当您输入上面的数字时 您会看到它被输入到
  • 圆形图像按钮android

    我有一个如图所示的图像按钮 我想要它周围的红色空间 它将是透明的 只是用红色来标识空间 将不可点击 是否可以 我尝试了不同的代码 例如通过 xml 或一些圆形图像视图代码 但没有任何帮助 无需计算任何内容 您唯一需要做的就是在按钮模板 xm
  • 在浏览器中强制使用 Mime 类型(使用 Javascript)

    我认为出于安全考虑这是不可能的 但是 是否可以强制浏览器处理具有某种 mime 类型的文件不控制服务器 我正在从 file 在客户端的机器本身上 提供文件 并且我希望文本文件可以在其关联的文本编辑器中打开 注意 Firefox 只是打开文件
  • 在递归函数调用之前使用 return 子句与不使用 return 子句有何不同?

    我只是在尝试一些递归 并注意到一些让我困惑的事情 让我用一些代码示例来说明 function loop x if x gt 10 return x loop x 1 the recursive call loop 0 上面的调用返回unde
  • 设计内存有限的记忆系统的简单方法是什么?

    我正在编写一个手动计算记忆系统 呃 在 Matlab 中 简单的部分很简单 执行计算后将数据放入记忆系统的一种方法 一种从记忆中查询和获取数据的方法 一种查询系统所有 密钥 的方法 这些部分没有太多疑问 问题是我的计算机的内存量有限 因此有
  • Firebase UI 回收器适配器中的不同子集合

    我正在尝试获取不同的子集合并使它们适应我的RecyclerAdapter与 Firebase UI 我的Cloud Firestore设置如下 user Collection uid1 Document name email fields
  • 将 XML 文档导入 Rails 数据库?

    我一直在阅读一个又一个的教程 但似乎没有什么对我有用 目标是获取包含元素和属性的 XML 文档并将数据插入数据库中 每个元素 属性将是数据库中的一列 每个条目是一行 这是我一直在使用的虚构 XML 文档