2011-10-28 67 views
9

我有一个客户端发送XML来解析我的站点。我通常是一个PHP的人,并了解如何通过PHP解析它,但我不知道如何做到这一点与Ruby。客户说,他们将自己的XML文件发布到我的服务器(以下即代码)获取XML文件POST请求与Ruby on Rails解析

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) 

感谢任何见解!

回答

12

请注意,您已经获得params中的XML内容,作为散列。但是如果你仍然喜欢使用Nokogiri:

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

如果你使用rails,它应该“解码”xml POST请求。例如:如果你使用引入nokogiri这听起来像你有畸形XML死心塌地

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

将可变量

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

的参数,可以尝试:

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

谢谢!现在一切都准备好了。 –

+0

从Rails 4开始,我们从Rails核心中删除了这个特性。我们现在需要使用一个单独的gem https://github.com/rails/actionpack-xml_parser – bloudermilk

0

简单无外部宝石的溶液:

class MyController < ApplicationController 

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

    render status: 200 
    end 

end