如何解决rails 3 XML builder:没有数据时不返回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
解决方法
您是否尝试过仅检查@isbnlist是否为空,如果是,请使用条件语句来遍历所有元素或仅打印出简短/空版本?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。