Mapricot¶ ↑
XML to object mapper with an interface similar to ActiveRecord associations.
Install¶ ↑
sudo gem install mapricot
Example Usage¶ ↑
Super Simple¶ ↑
require 'mapricot' simple_xml = %( <user> <id>1</name> <name>Bob</name> <pet>cat</pet> <pet>dog</pet> </user> ) class User < Mapricot::Base has_one :id, :integer has_one :name, :string has_many :pets, :string end user = User.new(simple_xml) puts user.id # => 1 puts user.name # => "Bob" puts user.pets # => ["cat", "dog"]
A little more realistic¶ ↑
require 'mapricot' xml = %( <user> <id>2</name> <name>Sally</name> <location code="ny123"> <city>New York</city> <state>NY</state> </location> <hobby> <description>Skiing</description> <number_of_years>2</number_of_years> </hobby> <hobby> <description>Hiking</description> <number_of_years>3</number_of_years> </hobby> </user> ) class User < Mapricot::Base has_one :id, :integer has_one :name # Tag type will default to :string has_many :pets has_one :location, :xml has_many :hobbies, :xml end class Location < Mapricot::Base has_attribute :code has_one :city has_one :state end class Hobby < Mapricot::Base has_one :description, :string has_one :number_of_years, :integer end user = User.new(xml) puts user.name # => "Sally" puts user.pets.inspect # => [] puts user.location.class # => Location puts user.location.city # => "New York" puts user.location.state # => "NY" puts user.location.code # => "ny123" puts user.hobbies.class # => Array puts user.hobbies.first.class # => Hobby user.hobbies.each do |hobby| puts "#{hobby.description} for #{hobby.number_of_years} years" end # => Skiing for 2 years # => Hiking for 3 years
Parsing from a URL¶ ↑
If you want to parse xml from a url, do something like this:
require 'open-uri' Foo < Mapricot::Base ... end url = 'http://www.example.com' Foo.new(open(url))
Changing the xml library¶ ↑
Mapricot.parser = :hpricot Mapricot.parser = :nokogiri Mapricot.parser = :libxml
Other stuff¶ ↑
Your classes should inherit from Mapricot::Base, which provides the class methods
-
has_one(name, type, opts = {})
-
has_many(name, type, opts = {})
-
has_attribute(name)
Copyright © 2010 Lou Zell, released under the MIT license