Project

xml-smart

0.0
Low commit activity in last 3 years
A long-lived project that still receives updates
An xml library that doesn't suck (since 2004). Based on Nokogiri since 2012. For more info check out the Documentation link below.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 5, >= 5.0.0
~> 1, >= 1.6.6
~> 1, >= 1.3
 Project Readme

XML::Smart - A Ruby class for fast and simple XML access

Copyright (C) 2004-2012 Jürgen Mangler juergen.mangler@univie.ac.at

Ruby/XML/Smart is freely distributable according to the terms of the GNU Lesser General Public License (see the file 'COPYING').

This program is distributed without any warranty. See the file 'COPYING' for details.

Installation

  • Based on Nokogiri 1.5.5
  • Thus works for MRI ruby 1.8.7, 1.9.x, JRuby (basically everything that is Nokogiri ready)
  • Works on Linux, OSX, Windows

Features

Principle of least surprise

  • Nokogiri is messy - violence always is
  • libxml smells like old-school C-Binding ;-)
  • rex is ... strange

Inherits Nokogiris GREAT compatibility for platforms and Ruby interpreters

XML only

Sorry, no css selectors, html, ... go to Nokogiri if you look for these.

Great and convenient namespace support, compared to everything else out there

Use namespaces in xpaths without any additional work:

  doc = XML::Smart.string('<test xmlns:aaa="uri:aaa"><aaa:test/></test>')
  doc.find('string(aaa:test)')
  doc.close

Register your own shortcusts to be available in all XPaths:

  doc = XML::Smart.string('<test xmlns:aaa="uri:aaa"><aaa:test/></test>')
  doc.register_namespace :a, 'uri:aaa'
  doc.find('string(a:test)')
  doc.close

NFS safe file locking while editing / reading from an XML file

  XML::Smart.modify("EXAMPLE.xml","<test><names/></test>") do |doc|
    doc.root.add "test_node"
  end

check against relaxng and xml schema

Libxml2, the basis for nokogiri has only partial xml-schema support, but full relaxng support. Thus checking against xml-schema with nokogiri may return positive results, although it is a lie. XML::Smart internally converts xml-schema to relaxng, thus allowing for seamless schema usage:

  doc = XML::Smart.string('<test xmlns:aaa="uri:aaa"><aaa:test/></test>')
  doc.validate_against(XML::Smart.open_unprotected('xmlschema.xml'))
  doc.validate_against(XML::Smart.open_unprotected('xmlschema.xml'))
  doc.find('string(a:test)')
  doc.close

xinclude

Libxml2, the basis for nokogiri does not support https xincludes. Nokogiri may impelement this in the future (issue sparklemotion/nokogiri#1321), but for now we do support it:

  doc.xinclude!

or

  doc.find('//someelement').first.xinclude!

Changes since 0.2.x (see Changelog)

  • qname instead of name
  • #register_namespace instead of #namespaces= to register shortcuts
  • no more namespaces for #find necessary, all namespaces in document are automatically available.
  • signals removed
  • pull parser removed

Documentation

Sorry, no inline code documentation yet. We have an extensive test suite, look for examples there for now.