Project

xmlhasher

0.04
Low commit activity in last 3 years
A long-lived project that still receives updates
Fast XML to Ruby Hash converter
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
 Dependencies

Development

>= 1.6, < 3
~> 0.8.21
~> 5.10
~> 12
~> 0.14.1
~> 3.2

Runtime

~> 2.11
 Project Readme

XmlHasher

Build Status Gem Version

Fast XML to Ruby Hash converter

Installation

XmlHasher is available through Rubygems and can be installed via:

$ gem install xmlhasher

or add it to your Gemfile like this:

gem 'xmlhasher'

Release Notes

See CHANGELOG.md

Usage

require 'xmlhasher'

# XmlHasher global configuration
#
# snakecase - convert all keys to snake case notation
# ignore_namespaces - remove XML namespaces
# string_keys - represent keys as Strings instead of Symbols
#
# here is default configuration
XmlHasher.configure do |config|
  config.snakecase = true
  config.ignore_namespaces = true
  config.string_keys = false
end

# alternatively, specify configuration options when instantiating a Parser
parser = XmlHasher::Parser.new(
  :snakecase => true,
  :ignore_namespaces => true,
  :string_keys => false
)

# by default, XmlHasher will convert all keys to symbols.  If you want all keys to be Strings, set :string_keys option to 'true'

# parse XML file
XmlHasher.parse(File.new('/path/to/my/file.xml'))

# parse XML string
XmlHasher.parse("<tag1><tag2>content</tag2></tag1>")
# => {:tag1=>{:tag2=>"content"}}

Benchmarks

How fast is it? Try it for yourself rake benchmark

Converting small xml from text to Hash:
                 user     system      total        real
activesupport(rexml)     0.196861   0.000692   0.197553 (  0.197756)
activesupport(libxml)    0.028840   0.000176   0.029016 (  0.029037)
activesupport(nokogiri)  0.044063   0.000516   0.044579 (  0.044618)
xmlsimple                0.225291   0.014291   0.239582 (  0.239756)
nori                     0.048385   0.000379   0.048764 (  0.048806)
xmlhasher                0.011791   0.000098   0.011889 (  0.011895)

Converting large xml from file to Hash:
                 user     system      total        real
activesupport(rexml)    25.891326   0.144542  26.035868 ( 26.052577)
activesupport(libxml)    3.911317   0.072332   3.983649 (  3.985904)
activesupport(nokogiri)  6.126251   0.061193   6.187444 (  6.191296)
xmlsimple               26.128386   0.120480  26.248866 ( 26.265013)
nori                     6.347459   0.028522   6.375981 (  6.380416)
xmlhasher                1.738668   0.027549   1.766217 (  1.767256)

Note: benchmarks were generated on a 2015 Macbook Pro using Ruby 2.5.1

Requirements

  • Ruby 2.0.0 or higher

Copyright

Copyright (c) 2013 Gene Drabkin. See LICENSE for details.