ruby-on-rails - 使用 Nokogiri 根据 Rails 应用程序中的用户输入搜索 XML 文件

标签 ruby-on-rails ruby xml nokogiri

所以我有一个 XML 文件(XML file)和一个架构(XML schema)。

我正在尝试创建一个快速 Rails 应用程序,以允许用户根据作为 sdnEntry 元素子元素的“lastName”元素搜索 XML 文件。

我在设置 Rails 应用程序或搜索表单时没有遇到任何问题。我还能够使用 Nokogiri 加载 XML 文件,并且可以运行简单的命令,例如...

xmldoc.css("lastName")

...返回一个包含所有“lastName”元素的节点集。不幸的是,这还不够好,因为它不仅列出了直接位于“sdnEntry”元素下方的“lastName”元素。另外,这甚至没有让我开始从表单中插入用户的输入。我在想这样的事情会奏效......

xmldoc.xpath("/xmlns:sdnList/sdnEntry/lastName[text()='#{param[:name]}']")

...但这没有用。奇怪的是,我什至无法...

xmldoc.xpath("/xmlns:sdnList/sdnEntry/lastName")

...工作。我只是不太了解 Nokogiri、XPath 或 XML 文档的 CSS 查询,无法弄清楚如何从用户输入表单传递参数来创建适当的查询,从而为我返回正确的信息。

我试着浏览 Nokogiri DocumentationW3Schools XPath Tutorial .没有快乐。

如果有任何指示、代码片段或建议,我将不胜感激。谢谢。

最佳答案

您的问题与 Nokogiri 使用的 XPath 有关。您需要在属性中指定命名空间是什么。更多信息请访问 Nokogiri documentation .

这是一个查找项目的示例,使用您的参数可能也能正常工作。

doc = Nokogiri::XML(File.read("sdn.xml"))
doc.xpath("//sd:lastName[text()='INVERSIONES EL PROGRESO S.A.']", "sd"=>"http://tempuri.org/sdnList.xsd")

>> [#<Nokogiri::XML::Element:0x80b35350 name="lastName" namespace=#<Nokogiri::XML::Namespace:0x80b44c4c href="http://tempuri.org/sdnList.xsd"> children=[#<Nokogiri::XML::Text:0x80b34e3c "INVERSIONES EL PROGRESO S.A.">]>]

关于ruby-on-rails - 使用 Nokogiri 根据 Rails 应用程序中的用户输入搜索 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017667/

相关文章:

ruby-on-rails - 用于在 Rails 3.2 中保存当前页面的按钮

ruby-on-rails - 错误: Could not find a valid gem 'digest' (>= 0) in any repository - Why can't I install/find the Digest gem?

arrays - 在 ruby​​ 上使用每个乘法数组

java - 初始应用程序介绍启动后启动启动屏幕

ruby-on-rails - validates_presence_of 导致 after_initialize 被一个奇怪的 self 调用

ruby-on-rails - Scaffold Rails 3 View 中的外键下拉列表

ruby - Twilio:Ruby:并行运行的调用的回调状态 URL:哪个调用已完成?

ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列?

xml - XML填写PDF表格?

java - 相同类不同包和 JAXB