如何从API请求解析XML节点?

时间:2014-10-13 17:23:47

标签: ruby xml api parsing nokogiri

如何保存我从API获取的XML页面中的信息?

网址为" 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

1 个答案:

答案 0 :(得分:1)

除了你的代码不是有效的Ruby之外,你要做的事情比必要的要困难得多,至少对于简单的刮擦和保存:

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

您可以根据需要进行构建。