XmlSimple создает одноэлементные массивы для каждого элемента — есть ли лучший способ?

#ruby #xml #xml-simple

#ruby #xml #xml-простой

Вопрос:

Я использую XmlSimple для превращения XML-документа в ruby-хэш. Это преобразует данные следующим образом:

 <resultPage>
  <total>2</total>
  <offset>0</offset>
  <limit>200</limit>
</resultPage>
  

В это:

 { :resultPage => [
    {
      :offset => [ "0" ],
      :total  => [ "2" ],
      :limit  => [ "200" ]
    }
] }
  

Обратите внимание, как он помещает все внутри массива, я полагаю, потому что он не знает, допускает ли схема несколько экземпляров, скажем, <offset> , внутри <resultPage> . Итак, чтобы получить доступ к моим данным, я всегда добавляю [0] в конце всего.

Должен ли я просто смириться с этим, или есть элегантный способ обойти это?

Ответ №1:

Вы можете передать опцию «ForceArray» в XmlSimple (по умолчанию она имеет значение true, установите для нее значение false, чтобы избавиться от массивов).

  > XmlSimple.xml_in(str)
 => {"total"=>["2"], "offset"=>["0"], "limit"=>["200"]} 
 > XmlSimple.xml_in(str, {"ForceArray" => false})
 => {"total"=>"2", "offset"=>"0", "limit"=>"200"}