Last Updated: March 02, 2016
· xurde

Parsing Grape params in an XML request with complex nested body including attributes

While trying to build an Grape-based API with complex XML body requests in the requests, I came to the point of figuring out how to reach XML attributes in a sample request like this.

      <PTC Quantity="1">ADT</PTC>

XML attributes when using Nokogiri are parsed as normal child elements, and the content (or text) of the element itself is parsed as an String named __content__.

So Grape parameters block should look like this in order to parse properly params.

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 :__content__, type: String

I hope it helps.