使用Nokogiri读取XML文件

时间:2014-09-05 12:36:30

标签: ruby-on-rails xml nokogiri

我目前有一个正常读取的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字段拉出来并将它们写入我的数据库?

2 个答案:

答案 0 :(得分:1)

.at将始终返回单个元素。要获取元素数组,请像使用xpath一样获取Item元素列表。

plu_import.barcodes = xml.xpath('//UPC_Code').map(&:content)

答案 1 :(得分:0)

感谢所有精彩提示。这无疑使我走向了正确的方向。我让它工作的方式只是在双重//.

之前添加一段时间
plu_import.barcodes = xml.xpath('.//UPC_Code').map(&:content)