我想將多個類似格式的XML文件解析爲CSV文件。如何使用Nokogiri將多個類似格式的XML文件合併爲CSV
我在谷歌搜索,nokogiri.org和搜索,但我一直沒能找到答案。
根據節點/元素結構,我有十個XML文件,它們位於當前目錄中。
將XML文件合併到單個XML文件後,我需要提取advisory
節點的特定元素。我想將link
,title
,location
,os -> language -> name
和reference -> name
數據輸出到CSV文件。
我的代碼是唯一能夠解析一個XML文檔,我想它要考慮到1:許多:
# Parse the XML file into a Nokogiri::XML::Document object
@doc = Nokogiri::XML(File.open("file.xml"))
# Gather the 5 specific XML elements out of the 'advisory' top-level node
data = @doc.search('advisory').map { |adv|
[
adv.at('link').content,
adv.at('title').content,
adv.at('location').content,
adv.at('os > language > name').content,
adv.at('reference > name').content
]
}
# Loop through each array element in the object and write out as CSV row
CSV.open('output_file.csv', 'wb') do |csv|
# Explicitly set headers until you figure out how to get them programatically
csv << ['Link', 'Title', 'Location', 'OS Name', 'Reference Name']
data.each do |row|
csv << row
end
end
我試圖改變的代碼來支持多個XML文件,並讓他們進入引入nokogiri :: XML :: Document對象:
xml_docs = []
Dir.glob("*.xml").each do |file|
xml = Nokogiri::XML(File.new(file))
xml_docs << Nokogiri::XML::Document.new(xml)
end
這成功地創建了正確的對象的數組xml_docs
它,但我不知道怎麼這六個對象轉換爲一個單一的對象。
這是示例XML。所有的XML文件使用相同的節點/元結構:
<advisories>
<title> Not relevant </title>
<customer> N/A </customer>
<advisory id="12345">
<link> https://www.google.com </link>
<release_date>2016-04-07</release_date>
<title> The Short Description Would Go Here </title>
<location> Location Name Here </location>
<os>
<product>
<id>98765</id>
<name>Product Name</name>
</product>
<language>
<id>123</id>
<name>en</name>
</language>
</os>
<reference>
<id>00029</id>
<name>Full</name>
<area>Not Defined</area>
</reference>
</advisory>
<advisory id="98765">
<link> https://www.msn.com </link>
<release_date>2016-04-08</release_date>
<title> The Short Description Would Go Here </title>
<location> Location Name Here </location>
<os>
<product>
<id>12654</id>
<name>Product Name</name>
</product>
<language>
<id>126</id>
<name>fr</name>
</language>
</os>
<reference>
<id>00052</id>
<name>Partial</name>
<area>Defined</area>
</reference>
</advisory>
</advisories>
代碼利用引入nokogiri :: XML ::文檔,但如果引入nokogiri :: XML :: Builder將努力爲這個更好的,我更願意調整更多我的代碼相應。
歡迎來到Stack Overflow。雖然你很高興轉身到這裏,不幸的是你錯過了SO的這一點;我們幫助*您*修正*您的*代碼中的錯誤/問題。請閱讀「[問]」,包括底部的鏈接和「[mcve]」。我們希望看到你的努力的證據:你嘗試了什麼?爲什麼它不工作?如果你沒有嘗試,你在哪裏搜索,爲什麼這些地方沒有你需要的信息?把XML傳給我們,並告訴我們你想做什麼,希望我們編寫代碼來解決問題,而不是問我們如何解決你在編寫時遇到的問題。 –
我會盡快修改我的問題,我不想讓這個問題時間過長,但我會看看我能做些什麼。謝謝你的提示! –
不客氣。 SO有一個雄心勃勃的目標,即成爲編程問題的在線參考,這是一本問題和解決方案的食譜。他們在這方面做得很好,正如搜索引擎的頂級結果所證明的那樣,但是確保問題和答案的質量仍然很高是一項持續的工作,這就是爲什麼我們需要我們所做的事情。長期的問題並不意味着高質量,所以他們很難寫作,並採取預先考慮和努力,但最終的結果是偉大的;你將會得到答案,其他人也會得到答案。歡迎來到解決大家問題的戰鬥! :-) –