2012-05-10 1 views
2

Savon에서 요소 수를 기반으로 태그 배열을 만드는 방법 item_id? 이것에 대한 다른 방법은 없습니까?Ruby - Rails - Savon 구조체 SOAP XML 몸체

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의 샘플을, BodyItemId에 대해 여러 ItemList 값 태그를 가진다이다. ItemId 길이는 무엇이든 될 수 있습니다.

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>[email protected]</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>[email protected]</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>[email protected]</Email> 
    <Name>name3</Name> 
</ContactInfo> 
</ItemList> 
</Body> 
+0

XML에서 예상되는 결과는 무엇입니까? 위의 문장을 사용하여 XML을 어떻게 만들 수 있습니까? –

+0

@SteffenRoller - 안녕하세요. 내 질문을 업데이트했습니다. 기본적으로 나는 xml을 생성하고자하는 문자열/배열을 가지고있다. 분할 값 자체는 xml의 내부 태그 중 하나입니다. 각 항목에 대해 여러 개의 외부 태그를 만들고 그 안에 다른 데이터를 추가해야합니다. –

답변

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' => '[email protected]', 
      'Name' => 'John Doe' } }, 
    { 'ItemId' => 'def', 
    'TimeStamp' => 
     { 'Time' => '04:27:40', 
      'TimeZone' => 'EST', 
      'Date' => '2012-05-12'}, 
    'ContactInfo' => 
     { 'Phone' => '888-888-8881', 
      'Email' => '[email protected]', 
      'Name' => 'Jane Doe' } }, 
    { 'ItemId' => 'ghi', 
    'TimeStamp' => 
     { 'Time' => '04:17:40', 
      'TimeZone' => 'EST', 
      'Date' => '2012-05-12'}, 
    'ContactInfo' => 
     { 'Phone' => '888-888-8882', 
      'Email' => '[email protected]', 
      'Name' => 'Jane Three' } }, 
    { 'ItemId' => 'xyz', 
    'TimeStamp' => 
     { 'Time' => '04:07:40', 
      'TimeZone' => 'EST', 
      'Date' => '2012-05-12'}, 
    'ContactInfo' => 
     { 'Phone' => '888-888-8883', 
      'Email' => '[email protected]', 
      '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 
+0

스티븐 돕기에 다시 한 번 감사드립니다! – rubiii