2014-10-13 2 views
0

API에서 가져온 XML 페이지의 정보를 저장하려면 어떻게해야합니까?API 요청에서 XML 노드를 구문 분석하려면 어떻게해야합니까?

URL은 "http://api.url.com?number=8-6785503"이며 반환

<OperatorDataContract xmlns="http://psgi.pts.se/PTS_Number_Service" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Name>Tele2 Sverige AB</Name> 
    <Number>8-6785503</Number> 
</OperatorDataContract> 

어떻게 파일에 NameNumber 노드를 구문 분석합니까? 당신은 적어도 간단한 스크랩과 저장, 필요 이상으로이 많이 어려워하고 코드가 유효하지 않습니다 루비라는 사실 외에

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 


url = "http://api.url.com?number=8-6785503" 
doc = Nokogiri::XML(open(url)) 

File.open("exporterad.txt", "w") do |file| 
      doc.xpath("//*").each do |item| 
       title = item.xpath('//result[group_name="Name"]') 

       phone = item.xpath("/Number").text.strip 


       puts "#{title} ; \n" 
       puts "#{phone} ; \n" 




       company = " #{title}; #{phone}; \n\n" 

       file.write(company.gsub(/^\s+/,'')) 



     end 

end 
+0

나는 이것이 당신이 원하는 것이라고 생각한다. http://stackoverflow.com/questions/17600037/how-do-i-use-nokogiri-to-parse-an-xml-file – bkdir

+0

나는 그것을 읽었으나 나는했다. 마지막 항목을 보지 마라. Thx bkdir –

답변

1

: 여기

내 코드입니다

실행
require 'nokogiri' 
require 'open-uri' 

url = "http://api.pts.se/PTSNumberService/Pts_Number_Service.svc/pox/SearchByNumber?number=8-6785503" 
doc = Nokogiri::XML(open(url)) 

File.open("exported.txt", "w") do |file| 
    name = doc.at('Name').text 
    number = doc.at('Number').text 
    file.puts name 
    file.puts number 
end 

이 포함 "exported.txt"라는 파일에 결과 :

Tele2 Sverige AB 
8-6785503 
당신은 그 위에 구축 할 수

필요에 따라

+0

정말 고맙습니다. 어디에서 잘못했는지 봅니다. 고마워요 –

+0

다행히 도왔습니다. HTML, XHTML 및 XML을 처리하는 것은 특히 이름 공간이있는 XML을 사용하면 실망 스러울 수 있습니다. Nokogiri는 원하는 항목을 쉽게 탐색하고 찾을 수있는 많은 기능을 제공합니다. 그 중 하나는 CSS를 사용하여 XPath가 아닌 노드를 선택하는 기능입니다. XPath는 더 많은 기능을 제공하지만 더 복잡하기 때문에 가독성을 위해 CSS로 시작한 다음 XPath로 전환해야합니다. 다른 사람들은 더 잘 알고 있으므로 사용하기 쉽습니다. 그것은 Nokogiri의 아름다움입니다.하지만 우리가 그 선택을 할 수있게 해주는 것입니다. –

+0

나는 CSS 선택기를 살펴보고 그 것을 배울 것이다. 나는 내가 가진 다른 문제를 당신이 볼 수 있다면 wounder. 테이블에서 변수로 값을 전달할 때 논리를 이해하지 못합니다. [link] http://stackoverflow.com/questions/26389455/how-to-iteriter-through-all-records-and-pass-database-value-to-a-variable 나는 생각하고 올바르게 생각하거나 내가 뭔가를 놓쳤습니다. ? –

관련 문제