Ruby 解析来自多个XML文件的数据并输出到csv文件

Ruby 解析来自多个XML文件的数据并输出到csv文件,ruby,xml,csv,cygwin,Ruby,Xml,Csv,Cygwin,我有十几个XML文件,其中包含一些wcat web性能测试的结果。在每个XML文件中都有一个数据节点,其中包含请求的每个页面的名称以及加载该页面所用的平均时间。我想从每个XML文件中提取这些信息,并将其输出到csv文件中,这样我就可以在excel中创建一个漂亮的图形 我可以用我的主要工作语言C#完成这项任务,但为了提高我的脚本编写技能,我想尝试使用unix/cygwin命令或Ruby等脚本语言来完成 XML文件的格式为: <report name="wcat" version="6.3.1

我有十几个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>

有没有好的cygwin命令行实用程序可以解析XML?或者,如果Ruby不能做到这一点,那么在Ruby中有一种很好的方法吗?

您所描述的可以在XSLT中完成,XSLT支持文本输出方法、多个输入文件(使用
document()
函数),当然还有模板


我知道有些人觉得XSLT很恶心,但我一直在用它来做这类事情,而且我很喜欢它。另外,它非常独立于平台。

您所描述的内容可以在XSLT中完成,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)
在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有一个很好的解析器,我非常喜欢它。它支持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
#/usr/bin/env ruby-w
xml=>请求名称II,793
注意,Nokogiri允许在标准XPath访问器之外使用CSS访问器,我在这里使用CSS访问器。实际的解析使用了中间的四行


Ruby有一个内置的CSV生成器/解析器,但是对于这个quick'n dirty示例,我没有使用它。

Ruby有一个很好的解析器,名为,我非常喜欢。它支持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
#/usr/bin/env ruby-w
xml=>请求名称II,793
注意,Nokogiri允许在标准XPath访问器之外使用CSS访问器,我在这里使用CSS访问器。实际的解析使用了中间的四行


Ruby有一个内置的CSV生成器/解析器,但是对于这个快速脏的示例,我没有使用它。

请原谅我的python新手,但是我如何获得elementTree模块?我在Windows7上安装了主要的Python发行版。请原谅我的Python新手,但是我如何获得elementTree模块?我在Windows7上,确实安装了主要的Python发行版。