=Xml Serialization for Ruby
Download 1.0.pre1::
http://prdownloads.sourceforge.net/scrapware/clxmlserial.1.0.pre1.zip
REXML (>=1.2.5):: http://www.germane-software.com/~ser/Software/rexml
Home Page:: http://clabs.org/clxmlserial.htm
===Overview
Xml Serialization allows classes to be marshalled to and from XML, with an
emphasis on concise, human readable and editable XML.
It consists of a module (+XmlSerialization+) and modified standard classes
which
add +to_xml+ and +from_xml+ methods. +to_xml+ is an instance method and
returns an XML
element containing the data from each instance variable in the including
class.
+from_xml+ is a singleton/class method which accepts an XML element and
creates an
instance of the class with the data in the element.
Currently, REXML is used for XML parsing. In later versions, I hope to
refactor
out the dependency on REXML so other XML processors could be plugged-in.
This is still very much in a pre-release state, though functional. If your
interested in this project, please feel free to offer up feedback.
===License
Copyright (c) 2002, Chris Morris (mailto:chrismo / homemail.com). BSD license.
===Install
% ruby install.rb
===Usage
See the examples directory for a sample. Unit tests are also included in
clxmlserialtest.rb. Here's a quick sample:
require 'cl/xmls'
class MyClass
include XmlSerialization
attr_accessor :attr
end
doc = REXML::Document.new(File.open("class.xml"))
c = MyClass.from_xml(doc.root)
c.attr = 'new value'
f = File.new("class.xml", File::CREAT|File::TRUNC|File::RDWR)
c.to_xml.write(f, -1)
f.close
yields either:
<MyClass>
<attr>
<String>new value</String>
</attr>
</MyClass>
or:
<MyClass>
<attr>new value</attr>
</MyClass>
The +XmlSerialization+ module includes a singleton configuration class with
an
+outputSimpleTypeElements+ setting. Turning this off gives more concise XML,
but currently loses type information. For example, a Fixnum type will be
loaded
as a String.
Currently, the following standard classes are supported:
* +String+
* +Fixnum+
* +Array+
* +Hash+
* +Time+
* (+Integer+, +Float+ and +Bignum+ should be added by next release)
+Array+ and +Hash+ work fine, even nested arrays and hashes, although the
XML gets a little out of hand in the concise department. Later releases
should tighten this up.