@Panda_Code
Сognizer

Как пропустить первый элемент и записать данные напротив друг друга?

Доброй ночи!

Есть некий csv файл, из него надо взять данные и записать в два столбца!
<?xml version="1.0" encoding="utf-16"?>
<SimpleGeoName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id>6295630</Id>
  <Name>Earth</Name>
  <Children>
    <SimpleGeoName>
      <Id>6255146</Id>
      <Name>Africa</Name>
      <Children>
        <SimpleGeoName>
          <Id>2589581</Id>
          <Name>Algeria</Name>
          <Children>
            <SimpleGeoName>
              <Id>2508226</Id>
              <Name>Wilaya de Aïn Defla</Name>
              <Children />
              <FCode>ADM1</FCode>
              <CountryCode>DZ</CountryCode>


Мой код:

require "csv"
require "nokogiri"

data = File.open('continents.xml', encoding:'utf-8') { |file| Nokogiri::XML (file) }

CSV.open("continents.csv", "w") do |csv|
  # нужны 2 столбца
  csv << ["Name", "FCode"]  

 # Записываем под столбец Name
  data.xpath("//Name").each do |name|
    csv << name.text.split(',', 3)
  end
end


Как пропустить первый тег <name>, записывая данные под столбец Name и записать данные под второй столбец Fcode ?

Ребятa, подскажите пожалуйста!
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
@Panda_Code Автор вопроса
Сognizer
Я разобрался, осталось только пропустить некоторые элементы.

# frozen_string_literal: true

require "nokogiri"
require "csv"


data = File.open('continents.xml', encoding:'utf-8') { |file| Nokogiri::XML (file) }
name = data.xpath("//Name")
fcode = data.xpath("//FCode")
pool = name.zip(fcode)
  
CSV.open("continents.csv", "w") do |csv|
  csv << ["Name", "FCode"]

  pool.each do |name, fcode|
    csv << [name.text, fcode.text]
  end
end
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы