2014-05-13 31 views
1

使用红宝石2,导轨4,宝石:XML /映射使用红宝石的XML ::映射XML /映射宝石创建嵌套xml文档

这里是电流输出:

class Item 
     include XML::Mapping 

     array_node :picture_details, 'PictureDetails', :class => PictureURL, :default_value => [] 
end 

class PictureURL 
     include XML::Mapping 
     include Initializer 
     text_node :picture_url, 'PictureURL', :optional => true 
end 

我得到的输出:

<PictureDetails> 
    <PictureURL>VALUE</PictureURL> 
</PictureDetails> 
<PictureDetails> 
    <PictureURL>VALUE</PictureURL> 
</PictureDetails> 
<PictureDetails> 
    <PictureURL>VALUE</PictureURL> 
</PictureDetails> 

我想要什么:

<PictureDetails> 
    <PictureURL>VALUE</PictureURL> 
    <PictureURL>VALUE</PictureURL> 
    <PictureURL>VALUE</PictureURL> 
</PictureDetails> 

我看了看文档,但仍无法弄清楚我应该如何设置这个达到我期望的输出..

回答

2

(我的XML映射宝石的作者)

从你的描述它看起来像你希望“PictureDetails”是你的数组节点的base_path,而“PictureURL”是每个数组元素的路径。并且在每个数组元素中,PictureURL应该只将其picture_url属性写入元素文本中,而不创建子元素或-attribute,这意味着text_node的路径规范应该只是'。'。

所以这应该工作:

class Item 
     include XML::Mapping 

     array_node :picture_details, 'PictureDetails', 'PictureURL', :class => PictureURL, :default_value => [] 
end 

class PictureURL 
     include XML::Mapping 
     include Initializer 
     text_node :picture_url, '.', :optional => true 
end