2011-06-15 60 views
0

我得到这个不错的XML时,有在字段中的数据:轨道3 XML构建:不返回任何XML元素时,有没有数据

<DescriptiveDetail> 
    <ProductComposition>00</ProductComposition> 
    <ProductForm>01</ProductForm> 
    <Measure> 
    <MeasureType>01</MeasureType> 
    <MeasureType>198</MeasureType> 
    <MeasureType>mm</MeasureType> 
    </Measure> 
</DescriptiveDetail> 

当没有数据,我想获得这:

<DescriptiveDetail> 
    <ProductComposition>00</ProductComposition> 
</DescriptiveDetail> 

但是,相反,我得到这个:

<DescriptiveDetail> 
    <ProductComposition></ProductComposition> 
    <ProductForm></ProductForm> 
    <Measure> 
    <MeasureType></MeasureType> 
    <MeasureType></MeasureType> 
    <MeasureType></MeasureType> 
    </Measure> 
</DescriptiveDetail> 

我怎么不返回的XML元素时,有没有数据?

(而且只是出于兴趣,如果你知道,你怎么返回自动关闭标签,例如

<Measure/> 

这里是我的XML构建代码(在满,相关位在中间):

xml.instruct!(:xml, :encoding => "ISO-8859-1") 
xml.ONIXMessage(:release=>"3.0") do 
    xml.Header do 
    xml.Sender 
     xml.SenderName 
    end 
    @isbnlist.each do |isbn| 
    xml.Product do 
     xml.RecordReference isbn.id 
     xml.NotificationType isbn.notificationtype 
     isbn.productcodes.each do |productcode| 
      xml.ProductIdentifier do 
      xml.ProductIDType productcode.idtype 
      xml.IDValue productcode.idvalue 
      end 
     end 
     xml.DescriptiveDetail do 
     xml.ProductComposition isbn.descriptivedetail_productcomposition_productcomposition 
     xml.ProductForm isbn.descriptivedetail_productcomposition_productform 
      isbn.measurements.each do |measurement| 
      xml.Measure do 
       xml.MeasureType measurement.descriptivedetail_measure_measuretype 
       xml.MeasureType measurement.descriptivedetail_measure_measurement 
       xml.MeasureType measurement.descriptivedetail_measure_measureunitcode 
      end 
      end 
     xml.TitleDetail do 
      xml.TitleType isbn.descriptivedetail_titledetail_titletype 
      xml.TitleElement do 
       xml.TitleElementLevel isbn.descriptivedetail_titledetail_titleelement_titleelementlevel 
       xml.TitlePrefix isbn.descriptivedetail_titledetail_titleelement_titleprefix 
       xml.TitleWithoutPrefix isbn.descriptivedetail_titledetail_titleelement_titlewithoutprefix 
      end 
      xml 
     end 
     end 
     end 
    end 
    end 

回答

0

你试过只是为了检查是否@isbnlist是空的,如果是这样,使用条件语句要么通过所有元素重复或只是打印出来的短/空versio N +

+0

谢谢你的想法。问题是,@isbnlist中的一些属性会有数据,有些则不会。 (@isbnlist Isbn.all) – snowangel 2011-06-15 13:16:24

+0

那么,另一种方法是检查每行是否属性有数据: xml.ProductIDType productcode.idtype除非productcode.idtype.nil? – yagooar 2011-06-15 14:51:25

+0

当然!非常感谢@yagooar。 – snowangel 2011-06-15 14:59:50