【问题标题】:How do I parse XML nodes from an API request?如何从 API 请求中解析 XML 节点?
【发布时间】:2014-12-08 08:14:59
【问题描述】:

如何保存从 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

【问题讨论】:

标签: ruby xml api parsing nokogiri


【解决方案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

您可以根据需要在此基础上进行构建。

【讨论】:

  • 很高兴它有帮助。处理 HTML、XHTML 和 XML 可能会令人沮丧,尤其是处理带有名称空间的 XML。 Nokogiri 提供了许多功能,可以更轻松地导航和定位您想要的内容。其中之一是它能够使用 CSS 来选择节点,而不是 XPath。虽然 XPath 功能更强大,但它也更复杂,因此我从 CSS 开始以提高可读性,然后在必要时切换到 XPath。其他人更熟悉它,所以他们只使用它。不过,这就是 Nokogiri 的美妙之处,它是否允许我们做出这些选择。
  • 我将研究 css 选择器并了解这一点。如果你能看看我的另一个问题,我会很高兴。在将表中的值传递给变量时,我不理解逻辑。 [链接]stackoverflow.com/questions/26389455/…我的想法是对的还是我在这里错过了什么?
  • 再次嗨,很抱歉打扰你“铁皮人”,但我对此视而不见,我不知道为什么我不能让它在这里工作。我究竟做错了什么 ? stackoverflow.com/questions/26689914/…
猜你喜欢
  • 2023-03-11
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多