如何使用Nokogiri和Ruby解析XML文件

时间:2017-02-08 07:43:29

标签: ruby xml nokogiri

我有一个XML文件:

<root>
    <person name="brother">Abhijeet</person>
    <person name="sister">pratiksha</person>
</root>

我想用Nokogiri解析它。我尝试使用CSS和XPath,但它返回nil或第一个元素值。如何检索其他值? 我试过了:

doc = Nokogiri::XML(xmlFile)
doc.elements.each do |f|
    f.each do |y|
         p y
    end
end

doc.xpath("//person/sister")
doc.at_xpath("//person/sister")

1 个答案:

答案 0 :(得分:0)

这是使用CSS搜索具有给定参数和值的节点的基本方法:

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<root>
  <person name="brother">Abhijeet</person>
  <person name="sister">pratiksha</person>
</root>
EOT

doc.at('person[name="sister"]').to_html # => "<person name=\"sister\">pratiksha</person>"

您需要研究CSS和XPath以及它们的语法是如何工作的。在XPath中//person/sister意味着在<sister>个节点内的<person>个节点搜索,匹配如下内容:

<root>
  <person>
    <sister />
  </person>
  <person>
    <sister />
  </person>
</root>

它会找到所有<sister />个节点。它不会搜索节点的参数。

不要这样做:

doc.elements.each do |f|
    f.each do |y|
         p y
    end
end

你会浪费大量的CPU来处理每个元素。而是学习选择器如何工作,这样你就可以利用libXML的强大功能。