Generic XML importer/exporter for ruby


#1

I’ve written a generic importer/exporter between XML and ruby objects.
What this means is that to generate an importer/exporter for this
format:

some value some other value

all you have to write is this:

require ‘xmlcodec’

class Root < XMLCodec::XMLElement
elname ‘root’
xmlsubel :firstelement
end

class FirstElement < XMLCodec::XMLElement
elname ‘firstelement’
xmlsubel_mult :secondelement
end

class SecondElement < XMLCodec::XMLElement
elname ‘secondelement’
elwithvalue
xmlattr :firstattr
end

This will create some ruby objects with methods to set the subelements
and the attributes and to import/export XML.

Besides being able to import/export the REXML DOM it can also create
XML text itself in one go (which is faster and uses less memory).

It also supports a “partial_export” mode where you can export a big
XML file by normally creating the elements but then exporting as you
create the tree and then deleting the element so that GC can reclaim
the object.

For the importing it has a XMLStreamObjectParser which is a stream
parser whose events are whole elements instead of start/end tags.

I’ve created and parsed 100MB files with these API’s with minimal memory
usage.

I’ve done this to process EAD XML files so an example of the use of
the library is “eadcodec”, the EAD importer/exporter.

Suggestions about the code and API are very welcome.
Opinions/Suggestions about the name “xmlcodec” would be great to.

The code can be found in

http://www.pedrocr.net/ruby/

and is LGPL licensed.

Greetings,

Pedro Côrte-Real.