2

サボンでは、要素の数に基づいてタグの配列を作成する方法はitem_id? これには他の方法がありますか?

item_id = "abc, def, xyz"
n = item_id.split(,).length

    #ItemList shall be of n times by creating ItemList for each
soap.body =  {
    'Body' => {
                'ItemList' => {  
    'ItemId' => "abc"
                }
                'ItemList' => {  
    'ItemId' => "def"
                }
                'ItemList' => {  
    'ItemId' => "xyz"
                }
          }
    }

編集: 以下は、実際に予想される xml のサンプルであり、それぞれBodyに複数のItemList値タグが必要ですItemIdItemId長さは何でも構いません。

item_id = "abc, def, xyz" #split this and make xml for each item.

<Body>
<ItemList>
<ItemId>abc</ItemId> #abc
<TimeStamp>
    <Time>04:57:40</Time>
    <TimeZone>EST</TimeZone>
    <Date>2012-05-12</Date>
</TimeStamp>
<ContactInfo>
    <Phone>888-888-8880</Phone>
    <Email>somebody1@somewhere.com</Email>
    <Name>name1</Name>
</ContactInfo>
</ItemList>

<ItemList>
<ItemId>def</ItemId> #def
<TimeStamp>
    <Time>04:27:40</Time>
    <TimeZone>EST</TimeZone>
    <Date>2012-05-12</Date>
</TimeStamp>
<ContactInfo>
    <Phone>888-888-8881</Phone>
    <Email>somebody2@somewhere.com</Email>
    <Name>name2</Name>
</ContactInfo>
</ItemList>

<ItemList>
<ItemId>xyz</ItemId> #xyz
<TimeStamp>
    <Time>04:37:40</Time>
    <TimeZone>EST</TimeZone>
    <Date>2012-05-12</Date>
</TimeStamp>
<ContactInfo>
    <Phone>888-888-8882</Phone>
    <Email>somebody2@somewhere.com</Email>
    <Name>name3</Name>
</ContactInfo>
</ItemList>
</Body>
4

1 に答える 1

1

私はこのようなビルダーを使用します。次に、結果のxml文字列をSavonのxml.bodyとして使用します。

require 'builder'

itemliste = [
  { 'ItemId' => 'abc',
    'TimeStamp' =>
         { 'Time' => '04:57:40', 
           'TimeZone' => 'EST', 
           'Date' => '2012-05-12'},
    'ContactInfo' =>
         { 'Phone' => '888-888-8880', 
           'Email' => 'somebody1@somewhere.com', 
           'Name' => 'John Doe' } },
  { 'ItemId' => 'def',
    'TimeStamp' =>
         { 'Time' => '04:27:40', 
           'TimeZone' => 'EST', 
           'Date' => '2012-05-12'},
    'ContactInfo' => 
         { 'Phone' => '888-888-8881', 
           'Email' => 'somebody2@somewhere.com', 
           'Name' => 'Jane Doe' } },
  { 'ItemId' => 'ghi',
    'TimeStamp' => 
         { 'Time' => '04:17:40', 
           'TimeZone' => 'EST', 
           'Date' => '2012-05-12'},
    'ContactInfo' => 
         { 'Phone' => '888-888-8882', 
           'Email' => 'somebody3@somewhere.com', 
           'Name' => 'Jane Three' } },
  { 'ItemId' => 'xyz',
    'TimeStamp' => 
         { 'Time' => '04:07:40', 
           'TimeZone' => 'EST', 
           'Date' => '2012-05-12'},
    'ContactInfo' => 
         { 'Phone' => '888-888-8883', 
           'Email' => 'somebody4@somewhere.com', 
           'Name' => 'Joe Sixpack' } }
]

item_id = "abc,def,xyz"
keys = item_id.split(',')
xml_body = ""
xml = Builder::XmlMarkup.new(:target => xml_body, :indent => 2)
xml.Body do
  itemliste.each do |item|
    if item_id.include? item['ItemId']
      xml.ItemList do
        xml.ItemId item['ItemId']
        xml.TimeStamp do
          xml.Time item['TimeStamp']['Time']
          xml.TimeZone item['TimeStamp']['TimeZone']
          xml.Date item['TimeStamp']['Date']
        end
        xml.ContactInfo do
          xml.Phone item['ContactInfo']['Phone']
          xml.Name item['ContactInfo']['Name']
          xml.Email item['ContactInfo']['Email']
        end
      end
    end
  end
end
puts xml_body
于 2012-05-15T01:30:55.490 に答える