Я не уверен насчет XMLSimple, но вы можете использовать Nokogiri.Что-то вроде этого должно сработать:
def unpack_value(node)
return node.text if(node.node_name == 'string')
return node.text.to_i if(node.node_name == 'integer')
return true if(node.node_name == 'true')
return false if(node.node_name == 'false')
# etc.
end
doc = Nokogiri::XML('<xml>' + your_key_value_xml + '</xml>')
h = doc.search('key').each_with_object({ }) { |n, h| h[n.text] = unpack_value(n.next_element) }
Если у вас в XML уже есть оболочка <xml>
, вам не нужно добавлять их.
* *Вызов 1008 * даст вам итератор со всеми элементами <key>
.Затем вы повторяете с each_with_object
, чтобы построить хеш.Метод text
дает вам содержимое узла, а next_element
дает вам узел, который следует сразу за <key>
, который у вас есть.Возможно, вам придется немного настроить unpack_value
, чтобы учесть все возможные типы значений, но это довольно просто.
Этот подход перезапишет предыдущие <key>
с новыми, но изменить его довольно легко.создайте массив маленьких хэшей с одним ключом, если вы хотите что-то сделать с дубликатами.