2017-02-08 31 views
-1

一个XML文件,我有一个XML文件:如何分析利用引入nokogiri和Ruby

<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

请阅读“[mcve]”。你读过Nokogiri的教程了吗?他们讨论如何搜索和提取信息。你是否在网上搜索了如何根据值找到节点的参数?您的选择器不正确,因此搜索将解释要执行的操作。 http://meta.stackoverflow.com/q/261592/128421也很重要。 –

回答

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的强大功能。