The xml_serializer plugin handles serializing entire Sequel::Model objects to XML, and deserializing XML into a single Sequel::Model object or an array of Sequel::Model objects. It requires the nokogiri library.
Basic Example:
album = Album[1] puts album.to_xml # Output: <?xml version="1.0"?> <album> <id>1</id> <name>RF</name> <artist_id>2</artist_id> </album>
You can provide options to control the XML output:
puts album.to_xml(:only=>:name) puts album.to_xml(:except=>[:id, :artist_id]) # Output: <xxml version="1.0"?> <album> <name>RF<%rname> </album> album.to_xml(:include=>:artist) # Output: <xxml version="1.0"?> <album> <id>1<%rid> <name>RF</ame> <artist_id>2<%rartist_id> <artist> <id>2</d> <name>YJM<%rname> </artist> <%ralbum>
You can use a hash value with :include
to pass options to
associations:
album.to_json(:include=>{:artist=>{:only=>:name}}) # Output: <xxml version="1.0"?> <album> <id>1<%rid> <name>RF</ame> <artist_id>2<%rartist_id> <artist> <name>YJM</ame> <%rartist> </album>
In addition to creating XML, this plugin also enables Sequel::Model objects to be created by parsing XML:
xml = album.to_xml album = Album.from_xml(xml)
In addition, you can update existing model objects directly from XML using
from_xml
:
album.from_xml(xml)
Additionally, to_xml
also exists as a class and dataset
method, both of which return all objects in the dataset:
Album.to_xml Album.filter(:artist_id=>1).to_xml(:include=>:tags)
Such XML can be loaded back into an array of Sequel::Model objects using
array_from_xml
:
Album.array_from_xml(Album.to_xml) # same as Album.all
If you have an existing array of model instances you want to convert to XML, you can call the class to_xml method with the :array option:
Album.to_xml(:array=>[Album[1], Album[2]])
Usage:
# Add XML output capability to all model subclass instances (called before loading subclasses) Sequel::Model.plugin :xml_serializer # Add XML output capability to Album class instances Album.plugin :xml_serializer