我目前有一个XML文件,除了一个部分外,其他部分都能正确读取。它是一个项目列表,有时一个项目有多个条形码。在我的代码中,它只提取第一个。如何迭代多个条形码。请参阅以下代码:
def self.pos_import(xml)
Plu.transaction do
Plu.delete_all
xml.xpath('//Item').each do |xml|
plu_import = Plu.new
plu_import.update_pointer = xml.at('Update_Type').content
plu_import.plu = xml.at('item_no').content
plu_import.dept = xml.at('department').content
plu_import.item_description = xml.at('item_description').content
plu_import.price = xml.at('item_price').content
plu_import.barcodes = xml.at('UPC_Code').content
plu_import.sync_date = Time.now
plu_import.save!
end
end
我的测试XML文件如下所示:
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<items>
<Item>
<Update_Type>2</Update_Type>
<item_no>0000005110</item_no>
<department>2</department>
<item_description>DISC-ALCOHOL PAD STERIL 200CT</item_description>
<item_price>7.99</item_price>
<taxable>No</taxable>
<Barcode>
<UPC_Code>0000005110</UPC_Code>
<UPC_Code>1234567890</UPC_Code>
</Barcode>
</Item>
</Items>
有什么想法如何提取两个UPC_Code字段并将它们写入我的数据库吗?
.at
将始终返回单个元素。要获取元素数组,请使用xpath
,就像获取Item元素列表一样。
plu_import.barcodes = xml.xpath('//UPC_Code').map(&:content)
感谢您提供的所有精彩提示。它无疑把我带向了正确的方向。我把它发挥作用的方法就是在双音//之前加一个句号。
plu_import.barcodes = xml.xpath('.//UPC_Code').map(&:content)