2011-10-28 40 views
9

Tôi có một khách hàng đang gửi XML cho trang web của tôi để phân tích cú pháp. Tôi thường là một anh chàng PHP và hiểu cách phân tích nó thông qua PHP, nhưng tôi không chắc chắn làm thế nào để làm điều tương tự với Ruby. Các khách hàng cho biết họ sẽ gửi tập tin XML để máy chủ của tôi (ví dụ: mã bên dưới)Lấy tập tin XML Yêu cầu POST để phân tích cú pháp với Ruby on Rails

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

và sau đó trang xử lý phân tích cú pháp cần để có thể phát hiện rằng một tập tin đã được gửi đến nó, và phân tích nó. Điều này có nghĩa là Ruby đơn giản tìm kiếm bất kỳ yêu cầu POST nào không? Tôi phải gọi gì để nhận nội dung POST (tệp XML) thành một biến để gây rối với nó?

Tôi đang sử dụng Nokogiri để phân tích cú pháp XML.

doc = Nokogiri::XML(xml) 

Đánh giá cao mọi thông tin chi tiết!

Trả lời

12

Lưu ý rằng bạn đã nhận được nội dung XML trong params, dưới dạng băm. Nhưng nếu bạn thích sử dụng Nokogiri:

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

nếu bạn đang sử dụng đường ray, nó sẽ "giải mã" yêu cầu POST xml. Ví dụ:

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

sẽ có sẵn trong params biến

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

nếu bạn chết đặt vào sử dụng nokogiri có vẻ như bạn có xml bị thay đổi, hãy thử:

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

Cảm ơn! Tất cả mọi thứ là tất cả các thiết lập ngay bây giờ. –

+0

Tính năng này đã bị xóa khỏi lõi Rails bắt đầu bằng Rails 4. Hiện tại, chúng tôi cần sử dụng một gem riêng biệt https://github.com/rails/actionpack-xml_parser – bloudermilk

0

Simple giải pháp không có đá quý bên ngoài:

class MyController < ApplicationController 

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

    render status: 200 
    end 

end 
Các vấn đề liên quan