Получить XML-файл POST-запроса для разбора на Ruby on Rails - PullRequest
9 голосов
/ 29 октября 2011

У меня есть клиент, который отправляет 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 ]

12 голосов
/ 29 октября 2011

Обратите внимание, что вы уже получаете содержимое XML в params в виде хэша.Но если вы все еще предпочитаете использовать Nokogiri:

def some_action
  doc = Nokogiri::XML(request.body.read) # or Nokogiri::XML.fragment
  ...
end
3 голосов
/ 29 октября 2011

если вы используете 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)
0 голосов
/ 05 апреля 2017

Простое решение без внешних камней:

class MyController < ApplicationController

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

    render status: 200
  end

end
...