2014-09-05 3 views
0

В настоящее время у меня есть XML-файл, который правильно читается, за исключением одной части. Это список элементов, и иногда один элемент имеет несколько штрих-кодов. В моем коде он только вытаскивает первый. Как я могу перебирать несколько штрих-кодов. Пожалуйста, смотрите код ниже:Чтение файла XML с помощью Nokogiri

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, и записать их в свою базу данных?

ответ

0

Спасибо за все замечательные советы. Это определенно привело меня в правильном направлении. Способ, которым я работал, это просто добавить период до двойного //.

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

.at всегда будет возвращать один элемент. Чтобы получить массив элементов, используйте xpath, как вы, чтобы получить список элементов Item.

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

Это все еще только первый UPC_Code в поле. Он не помещает оба поля UPC_Code. –

+0

Произошла ошибка в инструкции xpath. Он должен иметь два '//', чтобы найти все теги UPC_code. – infused

+0

Я заметил это и изменил его в своем коде без везения. Все еще только первый UPC_Code. plu_import.barcodes = xml.xpath ('// UPC_Code'). Map (&: content) –

Смежные вопросы