使用from_xml转换为散列时,如何使用XML属性? [英] How can I use XML attributes when converting into a hash with from_xml?

查看:90
本文介绍了使用from_xml转换为散列时,如何使用XML属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个XML元素,其中包含多个使用相同ID的子元素.子元素可以通过"size"属性来区分.当我使用from_xml创建哈希时,它将所有这些子元素1字段都合并在一起.

I have an XML element with multiple child elements that use the same ID. The child elements are distinguishable by a "size" attribute. When I create a hash using from_xml it lumps all these child elements 1 field.

如何基于XML属性将这些子元素解析为不同的字段?

How do I parse these child elements into different fields based on the XML attribute?

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

推荐答案

Hash.to_xml当前不会这样做.实际上,这仅适用于最简单的情况.

Hash.to_xml currently won't do that. It's really just meant for the simplest cases.

但是,有一个公开票证,其中包含一些建议的补丁程序.不过,我还是建议使用类似 Nokogiri 之类的方法来解析您的XML.

But, there's an open ticket with some proposed patches. Still, I would recommend something like Nokogiri to parse your XML.

这篇关于使用from_xml转换为散列时,如何使用XML属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆