簡體   English   中英

從多個XML文件中解析數據並輸出到csv文件

[英]Parse data from multiple XML files and output to csv file

我有十幾個XML文件,其中包含一些wcat web性能測試的結果。 在每個XML文件中都有一個數據節點,其中包含所請求的每個頁面的名稱以及加載它所需的平均時間。 我想從每個XML文件中提取該信息並將其輸出到csv文件,這樣我就可以在excel中創建一個漂亮的漂亮圖形。

我可以使用C#的主要工作語言來完成任務,但是為了提高我的腳本技能,我想嘗試使用unix / cygwin命令或Ruby等腳本語言來完成。

XML文件的格式是:

<report name="wcat" version="6.3.1" level="1" top="100">
 <section name="header" key="90000">
  ... lots of other XML junk...
  <item>
   <data name="reportt" >Request Name I</data>
   ...
   <data name="avgttlb" >628</data>
  </item>
  <item>
   <data name="reportt" >Request Name II</data>
   ...
   <data name="avgttlb" >793</data>
  </item>
  ... lots of other XML junk...
 </section
</report>

我需要的csv輸出是:

Request,File 1,File 2,...,File 12
Request Name I,628,123,...,789
Request Name II,793,456,...,987

有沒有可以解析XML的好的cygwin命令行實用程序? 或者失敗那是在Ruby中有一個很好的方法嗎?

您所描述的內容可以在XSLT中完成,它支持文本輸出方法,多個輸入文件(使用document()函數),當然還有模板。

我知道有些人發現XSLT很糟糕,但是我一直都在使用它來做這種事情,而且喜歡它。 此外,它幾乎與平台無關。

在python ...

import elementTree.ElementTree
import csv

result = []
tree = elementTree.ElemenTree.parse('test.xml')
section = tree.getroot().find('section')
items = section.findall('item')
for item in items:
    records = item.findall('data')
    row = [rec.text for rec in records]
    result.append(row)

csv.writer(file('output.csv', 'w'))
csv.writerows(result)

Ruby有一個很好的解析器,叫做Nokogiri ,我非常喜歡。 它支持XML和HTML,DOM和SAX,如果你喜歡它,可以構建XML。 它建立在libxml2之上。

#!/usr/bin/env ruby -w

xml = <<END_XML
<report name="wcat" version="6.3.1" level="1" top="100">
<section name="header" key="90000">
  <item>
    <data name="reportt" >Request Name I</data>
    <data name="avgttlb" >628</data>
  </item>
  <item>
    <data name="reportt" >Request Name II</data>
    <data name="avgttlb" >793</data>
  </item>
  </section
</report>
END_XML

require 'nokogiri'
doc = Nokogiri::XML(xml)
content = doc.search('item').map { |i| 
  i.search('data').map { |d| d.text }
}

content.each do |c|
  puts c.join(',')
end

# >> Request Name I,628
# >> Request Name II,793

請注意,Nokogiri允許使用我在這里使用的CSS訪問器,以及標准的XPath訪問器。 實際的解析采用了中間的四行。

Ruby有一個內置的CSV生成器/解析器,但對於這個快速的臟例子,我沒有使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM