2010-05-29 51 views
0

我嘗試以下,但被嚴重形成的輸出XML:如何使用XML Builder在rails中創建xml?

xml = Builder::XmlMarkup.new({:target => display }) 

xml.instruct! 

xml.mail { 
    xml.documents { 
    xml.document { 
     xml.template { 
     xml.source "gallery" 
     xml.name "Postcard: Image fill front" 
     } 
     xml.sections { 
     xml.section { 
      xml.name "Text" 
      xml.text "Hello, world" 
     } 

     xml.section { 
      xml.name "Image" 
      xml.attachment "1136946686-3425" 
     } 
     } #sections 
    } #document   
    } #documents 

    xml.addresses { 
    xml.addressee { 
     xml.name "Me" 
     xml.address "Street" 
     xml.city "San Francisco" 
     xml.state "CA" 
    } 
    } 
}  
@xml_display = xml 

我需要它看起來更像是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<mail> 
    <documents> 
    <document> 
     <template> 
     <source>gallery</source> 
     <name>Postcard: Image fill front</name> 
     </template> 
     <sections> 
     <section> 
      <name>Text</name> 
      <text>Hello, World!</text> 
      </section> 
     <section> 
      <name>Image</name> 
      <attachment>...attachment id...</attachment> 
      </section> 
     </sections> 
    </document> 
    </documents> 
    <addressees> 
    <addressee> 
     <name>John Doe</name> 
     <address>123 Main St</address> 
     <city>Anytown</city> 
     <state>AZ</state> 
     <postal-code>10000</postal-code> 
    </addressee> 
    </addressees> 
</mail> 

我的代碼最終在視圖中看起來像這樣(網頁的源文件):

<?xml version="1.0" encoding="UTF-8"?><mail/><documents/><document/><template/><source>gallery</source><name>Postcard: Image fill front</name> 

注:最終的XML需要被髮布到一個URL,而且我在使用其他的客戶端,因此希望一切變得作爲正文傳遞的實例變量。

實例變量只是@xml_display = XML,但它不工作... :(

回答

0

你可以傳遞塊到每臺築巢的項目。

xml.mail do |mail| 
    mail.documents do |documents| 
    documents.document do |document| 
     document.template do |template| 
     template.source "gallery" 
     template.name "Postcard: Image fill front" 
     end 
    end 
    end 
end 

還有更多有關builder rubyforge page的信息。

+0

嗨,謝謝,是的,我檢查了它...它暗示我可以嵌套{}以及進行更改...仍然有422錯誤...也許我需要定義一個目標而不是將@ml分配給@instance? – Angela 2010-05-29 22:54:59

+0

看着你更新的問題,你仍然需要傳遞一個變量到你的塊,然後使用該變量爲下一個元素。在我的例子中注意'| mail |'以及我如何使用'mail.documents'。 – theIV 2010-05-29 23:05:06

+0

我明白了,讓我試試看,如何將整個xml發送到對象中?我嘗試使用{:target => @target},但它不顯示任何東西 – Angela 2010-05-30 06:49:12