【问题标题】:Obtain XML file POST request to parse with Ruby on Rails获取 XML 文件 POST 请求以使用 Ruby on Rails 进行解析
【发布时间】:2011-10-28 20:47:22
【问题描述】:

我有一个客户端正在发送 XML 供我的站点解析。我通常是一个 PHP 人,并且了解如何通过 PHP 解析它,但我不确定如何对 Ruby 做同样的事情。客户说他们会将他们的 XML 文件发布到我的服务器(即下面的代码)

curl -X POST -H "Content-Type: text/xml" -d "@/path/to/file.xml" my-web-address.com/parser

然后解析器处理程序页面需要能够检测到文件已发送给它,并对其进行解析。这是否意味着 Ruby 只查找任何 POST 请求?我应该调用什么来将 POST 内容(XML 文件)放入一个变量来处理它?

我正在使用 Nokogiri 来解析 XML。

doc  = Nokogiri::XML(xml)

欣赏任何见解!

【问题讨论】:

    标签: ruby-on-rails ruby xml post nokogiri


    【解决方案1】:

    没有外部宝石的简单解决方案:

    class MyController < ApplicationController
    
      def postxml
        h = Hash.from_xml(request.body.read)
        Rails.logger.info h
    
        render status: 200
      end
    
    end
    

    【讨论】:

    • 我稍微改进了这一点,在Hash 行的末尾添加了.with_indifferent_access,以允许无关紧要的访问。
    【解决方案2】:

    请注意,您已经在 params 中获得了 XML 内容,作为哈希。但是,如果您仍然喜欢使用 Nokogiri:

    def some_action
      doc = Nokogiri::XML(request.body.read) # or Nokogiri::XML.fragment
      ...
    end
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 rails,它应该“解码”xml POST 请求。示例:

      <?xml version="1.0"?>
      <group id="3">
        <point>
          <value>70.152100</value>
        </point>
        <point>
          <value>69.536700</value>
        </point>
      </group>
      

      将在 params 变量中可用

      params['group']['id'] # => '3'
      

      如果您一心想使用 nokogiri,听起来您的 xml 格式错误,请尝试:

      Nokogiri::XML.fragment(request.body.read)
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      相关资源
      最近更新 更多