所以我有一个 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 Documentation和 W3Schools 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/