获取XML文件POST请求以使用Ruby on Rails进行解析

时间:2011-10-28 20:47:23

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

我有一个客户端正在为我的网站发送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)

欣赏任何见解!

3 个答案:

答案 0 :(得分:12)

请注意,您已经将params中的XML内容作为哈希值获取。但如果你更喜欢使用Nokogiri:

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

答案 1 :(得分: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)

答案 2 :(得分:0)

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

class MyController < ApplicationController

  def postxml
    h = Hash.from_xml(request.body.read)
    Rails.logger.info h

    render status: 200
  end

end