2017-02-08 53 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的強大功能。