在包含属性的复杂嵌套体的XML请求中解析Grape参数

时间:2015-11-03 00:44:33

标签: ruby xml grape grape-api

我正在尝试用Grape实现这一目标。我需要发送相对复杂的XML主体,包括元素属性,如下例所示:

<Travelers>
  <Traveler>
    <AnonymousTraveler>
      <PTC Quantity="1">ADT</PTC>
    </AnonymousTraveler>
   </Traveler>
</Travelers>

我正在尝试按照流行的惯例定义嵌套的params,将XML转换为JSON(这里只是ruby),如下所示:

optional :Travelers, type: Array do
  requires :Traveler, type: Hash do
    optional :AnonymousTraveler, type: Hash do
      requires :PTC, type: Hash do
        requires :_Quantity, type: Integer
        requires :__text, type: String
      end
    end
  end
end

但很明显,XML解析器不遵循这种基于下划线的约定并抛出错误消息:

[Travelers][Traveler][AnonymousTraveler][PTC][_Quantity] is missing
[Travelers][Traveler][AnonymousTraveler][PTC][__text] is missing

有关如何拦截XML body参数解析器并包含此约定逻辑的任何线索?

1 个答案:

答案 0 :(得分:0)

发现我没有遵循正确的约定。 Nokogiri解析器遵循这一个:

requires :PTC, type: Hash do
  requires :Quantity, type: Integer
  requires :__content__, type: String
end

这意味着属性被解析为普通子元素,元素值或文本被解析为名为__content__的子元素。

希望它有所帮助。