my answer for quiz #3. I first used rexml, but I hated it. Now I'm using nokigiri...
[ruby_quiz.git] / gedcom_to_xml.rb
1 #! /usr/bin/env ruby
2
3 require 'nokogiri'
4 include Nokogiri::XML
5
6 doc    = Document.new
7 gedcom = Node.new "gedcom", doc
8
9 doc << gedcom
10 level_element = []
11
12 IO.foreach(ARGV[0]) do |line|
13   next if line =~ /^\s*$/
14
15   # print "line:", line
16   level, tag_or_id, data = line.split(/\s+/, 3)
17   level = Integer(level)
18   parent = level == 0 ? gedcom : level_element[level - 1]
19
20   if tag_or_id =~/^@(.*)@$/
21     el = Node.new data.downcase.chomp, doc
22     el['id'] = $1
23   else
24     el = Node.new tag_or_id.downcase, doc
25     el.content = data.chomp
26   end
27
28   # puts "for level #{level}, adding #{el.name} to #{parent.name}"
29   parent << el
30
31   level_element[level] = el
32 end
33
34 puts doc.to_xml()
35