我正在尝试用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参数解析器并包含此约定逻辑的任何线索?
答案 0 :(得分:0)
发现我没有遵循正确的约定。 Nokogiri解析器遵循这一个:
requires :PTC, type: Hash do
requires :Quantity, type: Integer
requires :__content__, type: String
end
这意味着属性被解析为普通子元素,元素值或文本被解析为名为__content__
的子元素。
希望它有所帮助。