2017-02-08 5 views
-1

를 사용하여 XML 파일을 구문 분석 :어떻게 XML 파일이 노코 기리 루비

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

가 나는 그것이 노코 기리를 사용하여 분석하고자한다. 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와 구문이 작동하는 방식에 대해 설명합니다.

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

는 모든 <sister /> 노드를 찾아 낼 것입니다 : XPath를 //person/sister에서 같은 일치, 사방 <person> 노드 내부 <sister> 노드에 대한 검색을 의미합니다. 노드의 매개 변수를 검색하지 않습니다.

은하지 말라 : 당신은 모든 요소를 ​​걷는 CPU를 많이 낭비하는거야

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

. 대신 선택기가 작동하는 방식을 배우므로 libXML의 힘을 활용할 수 있습니다.