2011-10-28 66 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