Я хочу преобразовать свой XML-документ в Hash в Ruby / Rails. На самом деле, преобразование по умолчанию Hash.from_xml в Rails работает для меня, за исключением одного случая.
У меня есть список элементов, содержащихся в элементе <item-list>
, хотя эти элементы могут быть разных типов. Например, standard-item
и special-item
, каждый из которых имеет различный набор дочерних элементов.
<item-list>
<standard-item>
<foo>...</foo>
<bar>...</bar>
</standard-item>
<standard-item>
<foo>...</foo>
<bar>...</bar>
</special-item>
<special-item>
<baz>...</baz>
</special-item>
</item-list>
Эта структура XML может сбивать с толку Hash.from_xml, поскольку она не знает, что и стандартный, и специальный элемент являются элементами и должны находиться на одном уровне. Следовательно, из приведенного выше XML хеш, сгенерированный Hash.from_xml, будет:
{ 'item-list' => { 'standard-item' => [ { 'foo' => '...', 'bar' => '...' },
{ 'foo' => '...', 'bar' => '...' } ],
'special-item' => { 'baz' => '...' } }}
Но я хочу, чтобы все элементы были членами списка, например:
{ 'item-list' => [ { 'standard-item' => { 'foo' => '...', 'bar' => '...' } },
{ 'standard-item' => { 'foo' => '...', 'bar' => '...' } },
{ 'special-item' => { 'baz' => '...' } } ]
Можно ли расширить / настроить from_xml, чтобы он работал так, как я хочу для этого случая? Если это невозможно, каков наилучший способ добиться этого? Учитывая, что это единственный элемент, который содержит что-то, что отличается от общего преобразования XML в Hash, мне кажется неправильным реализовывать всю процедуру преобразования, где она могла бы быть реализована тысячу раз.
Еще одна небольшая заметка, Hash.to_xml
также заменяет все черточки подчеркиванием. Есть ли способ предотвратить эту замену?