2012-05-10 55 views
4

進出口試圖打造出了這個樣品在Ruby on Rails應用程序與builder gem命名空間中生成的寶石屬性

<?xml version="1.0" encoding="utf-8"?> 
<ngp:contactGet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ngp="http://www.ngpsoftware.com/ngpapi"> 
<campaignID>1033</campaignID> 
<contactID>199434</contactID> 
</ngp:contactGet> 

我可以按如下生成與命名空間標籤:

xml = Builder::XmlMarkup.new 
xml.ngp :contactGet 

...但我無法在該標籤中獲取屬性。

我認爲

xml.ngp :contactGet("xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance" "xmlns:ngp" =>"http://www.ngpsoftware.com/ngpapi" 

會工作,但事實並非如此。

請幫忙!

回答

6

想通了:

xml.tag!('gp:contactGet', {"xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance", "xmlns:ngp"=>"http://www.ngpsoftware.com/ngpapi"}) do 
    xml.campaignID("1033") 
    xml.contactID("199434") 
end 

主要生產...

<?xml version="1.0" encoding="UTF-8"?> 
<gp:contactGet xmlns:ngp="http://www.ngpsoftware.com/ngpapi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <campaignID>1033</campaignID> 
    <contactID>199434</contactID> 
</gp:contactGet><to_s/> 
1

從Builder的文檔:http://builder.rubyforge.org/

XML命名空間部分目前已可支持。如果標籤調用的第一個參數 是一個符號,它將被連接到標籤 產生一個名稱空間:標籤組合。顯示這一點比 更容易描述它。

xml.SOAP:信封做...結束

只要把空間冒號前的命名空間,以生產用於建造合適的形式(例如 「SOAP:信封」 =>「xml.SOAP:信封「)

所以,你可以這樣寫:

xml.gp :contactGet do 
    xml.campaignID("1033") 
    xml.contactID("199434") 
end 
1

你可以用它代替這句法xml.tag!('gp:contactGet')

xml.gp :contactGet do 
    xml.contactID, "199434" 
end 

另外,如果您需要塊中標記的名稱空間,則可以使用以下語法。我無法在其他地方找到此信息,因此將其添加到此處。

xml.tag!('gp:contactGet') do 
    xml.gp :contactID, "199434" 
end 

爲了給下面的標記:

<gp:contactGet> 
    <gp:contactID>199434</gp:contactID> 
</gp:contactGet>