首页 文章

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

提问于
浏览
-1

我有一个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

    这是使用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 意味着在 <person> 节点内的所有 <sister> 节点搜索,匹配如下:

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

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

    不要这样做:

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

    你将浪费大量的CPU遍历每个元素 . 而是学习选择器如何工作,这样你就可以利用libXML的强大功能 .

相关问题