在使用from_xml转换为哈希时,如何使用XML属性?

时间:2010-06-23 05:02:50

标签: ruby-on-rails xml hash

我有一个XML元素,其中包含多个使用相同ID的子元素。子元素可通过“size”属性区分。当我使用from_xml创建哈希时,它会将所有这些子元素1字段混为一谈。

如何根据XML属性将这些子元素解析到不同的字段?

XML:

<artist rank="48">
 <name>KISS</name>
  <image size="small">http://userserve-ak.last.fm/serve/34/3329738.jpg</image>
  <image size="medium">http://userserve-ak.last.fm/serve/64/3329738.jpg</image>
  <image size="large">http://userserve-ak.last.fm/serve/126/3329738.jpg</image>
  <image size="extralarge">http://userserve-ak.last.fm/serve/252/3329738.jpg</image>
  <image size="mega">http://userserve-ak.last.fm/serve/500/3329738/KISS+04.jpg</image>
</artist>

Ruby:

>>xml = "<artist rank='48'><name>KISS</name><image size='small'>http://userserve-ak.last.fm/serve/34/3329738.jpg</image><image size='medium'>http://userserve-ak.last.fm/serve/64/3329738.jpg</image><image size='large'>http://userserve-ak.last.fm/serve/126/3329738.jpg</image><image size='extralarge'>http://userserve-ak.last.fm/serve/252/3329738.jpg</image><image size='mega'>http://userserve-ak.last.fm/serve/500/3329738/KISS+04.jpg</image></artist>"
=> "<artist rank='48'><name>KISS</name><image size='small'>http://userserve-ak.last.fm/serve/34/3329738.jpg</image><image size='medium'>http://userserve-ak.last.fm/serve/64/3329738.jpg</image><image size='large'>http://userserve-ak.last.fm/serve/126/3329738.jpg</image><image size='extralarge'>http://userserve-ak.last.fm/serve/252/3329738.jpg</image><image size='mega'>http://userserve-ak.last.fm/serve/500/3329738/KISS+04.jpg</image></artist>"
>>h = Hash.from_xml xml
=> {"artist"=>{"name"=>"KISS", "rank"=>"48", "image"=>["http://userserve-ak.last.fm/serve/34/3329738.jpg", "http://userserve-ak.last.fm/serve/64/3329738.jpg", "http://userserve-ak.last.fm/serve/126/3329738.jpg", "http://userserve-ak.last.fm/serve/252/3329738.jpg", "http://userserve-ak.last.fm/serve/500/3329738/KISS+04.jpg"]}}

我想要的是什么:

=> {"artist"=>{"name"=>"KISS", "rank"=>"48", "image_small"=>"http://userserve-ak.last.fm/serve/34/3329738.jpg", "image_medium"="http://userserve-ak.last.fm/serve/64/3329738.jpg", "image_large"="http://userserve-ak.last.fm/serve/126/3329738.jpg", "image_extralarge"="http://userserve-ak.last.fm/serve/252/3329738.jpg", image_mega"="http://userserve-ak.last.fm/serve/500/3329738/KISS+04.jpg"}}

1 个答案:

答案 0 :(得分:1)

Hash.to_xml目前不会这样做。它真的只适用于最简单的情况。

但是,有一些open ticket有一些建议的补丁。不过,我建议像Nokogiri这样的东西来解析你的XML。