require "rexml/document"
unless ARGV.size == 1 and test(?e,ARGV[0])
puts "Usage: #{File.basename(__FILE__)} GEDCOM File"
exit
end
lineArray = File.open(ARGV[0]) { |f| f.read }.split(/\n/)
doc = REXML::Document.new("<gedcom/>");
stack = [doc.root]
lineArray.each do |line|
next if line =~ /^\s*$/
line =~ /^\s*(\d+)\s+(@\S+@|\S+)(\s+.*)?$/ or next
level = $1.to_i
tag = $2
data = $3
while (level+1)<stack.size
stack.pop
end
parent = stack.last
if tag =~ /@\S+@/
el = parent.add_element data
el.attributes['id'] = tag
else
el = parent.add_element tag
el.text = tag
end
stack.push el
end
doc.write($stdout,0)
doc.write(File.open(ARGV[0]+'.xml','wb'),0)