【发布时间】:2019-06-16 21:40:50
【问题描述】:
This my csv output,我需要根据States节点的最早日期对行进行排序。
require 'nokogiri'
require 'csv'
xmlfile = File.read("test3.xml")
doc = Nokogiri::XML(xmlfile)
all = []
doc.css('Firm').each_with_index do |firm,i|
firstchild = []
secondchild =[]
firm.css('States').each do |rgltr_addr_node|
if rgltr_addr_node.has_attribute?("RgltrCd")
RgltrCd =rgltr_addr_node.attributes["RgltrCd"]&&rgltr_addr_node.attributes["RgltrCd"].value
else
RgltrCd = "NA"
end
if rgltr_addr_node.has_attribute?("St")
St = rgltr_addr_node.attributes["St"] && rgltr_addr_node.attributes["St"].value
else
St = "NA"
end
if rgltr_addr_node.has_attribute?("Dt")
Dt = rgltr_addr_node.attributes["Dt"] && rgltr_addr_node.attributes["Dt"].value
else
Dt ="NA"
end
firstchild[0] = RgltrCd
firstchild[1] = St
firstchild[2] = Dt
end
firm.css('Filing').each do |filing_node|
if filing_node.has_attribute?("Dt")
Dt = filing_node.attributes["Dt"] && filing_node.attributes["Dt"].value
else
Dt ="NA"
end
if filing_node.has_attribute?("FormVrsn")
FormVrsn = filing_node.attributes["FormVrsn"] && filing_node.attributes["FormVrsn"].value
else
FormVrsn ="NA"
end
secondchild[0] = Dt
secondchild[1] = FormVrsn
end
end
all << firstchild + secondchild
end
我使用以下循环数据在 csv 的每一行中显示:
CSV.open('new_test3_file.csv', 'wb' ) do |row|
row << ['States', 'Filing']
all.each do |data|
row << data
end
谁能帮我按日期排序?
【问题讨论】:
-
以上代码中的
all是什么?日期以字符串形式提供的字符串数组? -
all 是一个包含单个数组组合的数组
-
all = [] 并且我将我的子数组按如下方式推送到States 和 Filing 的每个节点中:所有
-
第一个代码块表示在csv中显示的输出
-
@ray,我更新了我的 all[],它只有两个数组。(firstchild 和 secondchild)
标签: ruby-on-rails ruby xml csv