【问题标题】:How can I use XML attributes when converting into a hash with from_xml?使用 from_xml 转换为哈希时如何使用 XML 属性?
【发布时间】:2011-03-07 03:44:06
【问题描述】:

我有一个带有多个使用相同 ID 的子元素的 XML 元素。子元素可通过“size”属性进行区分。当我使用from_xml 创建哈希时,它会将所有这些子元素集中到一个字段中。

如何根据 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>

鲁比:

>>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"}}

【问题讨论】:

    标签: ruby-on-rails xml hash


    【解决方案1】:

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

    但是,open ticket 有一些建议的补丁。不过,我还是推荐Nokogiri 之类的东西来解析您的 XML。

    【讨论】:

    • 谢谢,我会调查的。 FWIW,from_xml 将图像元素添加为数组。所以我能够使用数组位置访问每个图像元素的内容,例如:h['artist']['image'][1]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2014-05-10
    • 1970-01-01
    • 2012-09-06
    • 2021-07-13
    相关资源
    最近更新 更多