【问题标题】:Parse http response in Ruby在 Ruby 中解析 http 响应
【发布时间】:2014-09-17 08:04:24
【问题描述】:

我提出以下要求:

  uri = URI.parse(url)
  session = Net::HTTP.new(uri.host, uri.port)
  headers = {}
  res = session.start do |http|
    http.get(request_url, headers)
  end

响应如下所示:

<string xmlns="http://xxx">
    some string
</string>

是否有一些快速的解决方案来解析上述响应并得到some string。我可以使用正则表达式来获取它,但我想使用 Ruby 中存在的东西。

【问题讨论】:

  • 使用..Nokogiri解析res

标签: ruby xml parsing


【解决方案1】:

使用任何 XML 解析器。例如,nokogiri:

require 'nokogiri'
n = Nokogiri::HTML::parse response
parsed_string = n.xpath('//string').text

【讨论】:

    【解决方案2】:

    正如 Arup Rakshit 所说,使用 nokogiri 解析 xml:

    require 'nokogiri'
    
    res = <<EOS
    <string xmlns="http://xxx">
        some string
    </string>
    EOS
    
    root = Nokogiri.parse(res)
    root.at_xpath('.//*[local-name()="string"]').text.strip  # Using xpath
    # => "some string"
    root.at_css('string').text.strip  # Using css selector
    # => "some string"
    

    【讨论】:

      【解决方案3】:

      您可以使用 REXML 或 SimpleXML 解析该 XML,并获取字符串。

      我更喜欢 SimpleXML。

      示例

      data['Result'].each do |item|
         item.sort.each do |k, v|
            if ["Title", "Url"].include? k
               print "#{v[0]}" if k=="Title"
               print " => #{v[0]}\n" if k=="Url"
            end
         end
      end
      

      https://developer.yahoo.com/ruby/ruby-xml.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 2020-03-14
        相关资源
        最近更新 更多