我有一个客户端正在为我的网站发送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)
欣赏任何见解!
答案 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