2013-03-20 48 views
0

我想產生這樣的xml:構建在Ruby中被添加<xml/>到標記>

<ns1:type>Account</ns1:type> 
    <ns1:ids>2c92c0f83d60e055013d859f7f4873ee</ns1:ids> 
    <ns1:ids>2c92c0f83d60e055013d859f7f2f73ec</ns1:ids> 

我使用這個代碼:

def generate_id_xml 
    xml = Builder::XmlMarkup.new 

    xml.__send__(self.ons, :type, self.remote_name) 

    objects.each do |o| 
    xml.__send__(self.ons, :ids, o.id) 
    end 
    xml.xml 
end 

但它是生產:

<ins1:type>Account</ins1:type> 
<ins1:ids>2c92c0f93d60e66d013d83e5845e04bc</ins1:ids 
<ins1:ids>2c92c0f93d60e66d013d83e5847904be</ins1:ids> 
<xml/> 

爲什麼它添加了xml /有沒有辦法擺脫它?

我有這個代碼,它沒有添加xml /標籤到它的輸出。

def generate_xml 
    xml = Builder::XmlMarkup.new 
    objects.each do |o| 
    generate_object xml, o 
    end 
    xml.xml   
end 
#generate xml for an object 
def generate_object(builder, object) 
    builder.__send__(self.zns, :zObjects, 'xsi:type' => "ins1:#{self.remote_name}") do |a| 
     object.to_hash.each do |k,v| 
     a.__send__(self.ons, k.to_s.zuora_camelize.to_sym, v) unless v.nil? 
     end 
    end 
end 
+0

我也剛剛注意到,第一行ID缺少> endtag。 – user2183651 2013-03-20 03:48:51

回答

0

xml.xml發送一個方法調用xml到建設者 - 建設者似乎通過處理所有方法調用的元素名稱的工作。其中有趣的是導致它這樣做在IRB:出現

builder = Builder::XmlMarkup.new 
=> <inspect/> 

inspect元素,因爲IRB使用Object#inspect向您展示調用的結果。然後哪個建設者將其解釋爲「添加一個名爲」檢查「的空元素」

我不太確定您的其他代碼是如何工作的,元素,並且代碼可能會以某種方式從第二種工作方法中選擇或過濾XML。你是否嘗試過隔離工作方法並直接調用它?

當我嘗試你的代碼的這種變化:

def generate_id_xml 
    builder = Builder::XmlMarkup.new 
    builder.namespace :type, 'contents' 
    ['09876','65432'].each do |id| 
    builder.ns2 :ids, id 
    end 
    builder 
end 

我得到以下XML

<namespace:type>contents</namespace:type><ns2:ids>09876</ns2:ids><ns2:ids>65432</ns2:ids> 

因此,它看起來對我來說,在.xml你的最後一行是多餘的。不能解釋爲什麼你的第二個代碼示例工作正常。 。 。

相關問題