Hi,

Here is my solution.

I hope it would be the shortest one.

I convert the file into a Hash and then, use XML-Simple in order to 
convert the Hash into an XML File.

I've supposed the deep level won't be greater than 2 (in the example 
given it's the case ...).
A general solution would be a little more tricky.
I've done something with 'eval' but it's very dirty. So I didn't gave 
the general solution.

----------------------------
#!/usr/bin/ruby
require 'xmlsimple'
res = Hash.new
tag_niv = []
while line = gets
         if line =~ /^0 @([A-Z0-9]+)@ (\w+)$/
                 id,type = $1,$2
                 res[type] = [] if !res[type]
                 res[type] << Hash.new
                 res[type][-1]['id'] = id
                 tag_niv[0] = 0
         elsif line =~ /^(\d+)\W+(\w+)\W+(.*)$/ and id
                 num,tag,data = $1.to_i,$2,$3
                 tag_niv[num] = $2
                 if num == 1
                         res[type][-1][tag] = [data]
                 elsif num == 2
                         res[type][-1][tag_niv[1]] << Hash.new if 
res[type][-1][tag_niv[1]].length == 1
                         res[type][-1][tag_niv[1]][-1][tag] = [data]
                 end
         end
end
puts XmlSimple.xml_out(res)
------------------------