Hi,
2009/8/6 James Jhfghgfhgf <>:
> Hey,
>
> I've been having some trouble getting to grips with the various XML
> libraries, I just want to put together a ruby script that will convert a
> basic XML file into a nested array then just output that array to the
> console.
>
> The XML looks like this:
> <vector>
> =C2=A0<point>
> =C2=A0 =C2=A0 =C2=A0<x>1018.550659</x>
> =C2=A0 =C2=A0 =C2=A0<y>558.138367</y>
> =C2=A0 =C2=A0 =C2=A0<z>102.505821</z>
> =C2=A0</point>
> =C2=A0<point>
> =C2=A0 =C2=A0 =C2=A0<x>1013.557495</x>
> =C2=A0 =C2=A0 =C2=A0<y>560.874878</y>
> =C2=A0 =C2=A0 =C2=A0<z>107.041840</z>
> =C2=A0</point>
> =C2=A0<point>
> =C2=A0 =C2=A0 =C2=A0<x>1008.563049</x>
> =C2=A0 =C2=A0 =C2=A0<y>563.611267</y>
> =C2=A0 =C2=A0 =C2=A0<z>111.577576</z>
> =C2=A0</point>
> </vector>
> <vector>
> =C2=A0<point>
> =C2=A0 =C2=A0 =C2=A0<x>1030.809204</x>
> =C2=A0 =C2=A0 =C2=A0<y>551.722961</y>
> =C2=A0 =C2=A0 =C2=A0<z>86.581741</z>
> =C2=A0</point>
> =C2=A0<point>
> =C2=A0 =C2=A0 =C2=A0<x>1027.500854</x>
> =C2=A0 =C2=A0 =C2=A0<y>553.190613</y>
> =C2=A0 =C2=A0 =C2=A0<z>95.061058</z>
> =C2=A0</point>
> </vector>
>
> and I want to make it this:
> [[[1018.550659],[558.138367],[102.505821]],[[1013.557495],[560.874878],[1=
07.041840]],[[1008.563049],[563.611267],[111.577576]]],[[[1030.809204],[551=
722961],[86.581741]],[[1027.500854],[553.190613],[95.061058]]]
>
> Anyone know the best way to go about this?
>
Your xml file is missing the root element.
If your xml file is 'a.xml', you can do something like this:
require 'rexml/document'
doc =3D REXML:

ocument.new("<root>"+File.read("a.xml")+"</root>")
res =3D doc.elements.to_a("/*/*").map{|e1|
e1.elements.to_a.map{|e2|e2.elements.to_a.map{|e3| e3.text}}
}
p res
Regards,
Park Heesob