--- /dev/null
+#!/usr/bin/ruby -w
+
+require 'rexml/document'
+include REXML
+
+FILENAME = 'test.xml'
+
+if !File.exists?( FILENAME )
+ puts 'File not found.'
+ exit 1
+elsif !File.readable?( FILENAME )
+ puts 'File not readable.'
+ exit 1
+end
+
+# puts "Opening file #{FILENAME} (#{FILENAME.size} bytes)"
+printf( "Opening file %s (%d bytes)\n", FILENAME, FILENAME.size )
+file = File.open( FILENAME )
+
+# use file to instanciate an XML-Object
+doc = Document.new file
+
+### Finds and returns the first node that matches the supplied xpath
+# puts XPath.first( doc, '//name' )
+
+### Iterates over nodes that match the given path, calling the supplied block with the match.
+a = XPath.each( doc, '//name' ) { |elem| puts elem.text }
+printf( "elements matching: %d\n", a.length )
+
+### Returns an array of nodes matching a given XPath
+#a = XPath.match( doc, '//name' )
+#printf( "%d elements matching.\n", a.length )
+#puts a # <name>G</name> ...
+
+# get Attributes
+# doc.elements.each( 'channel/subchannel/package' ) { |element| puts element.attributes['name'] }
+
+file.close
--- /dev/null
+<channel><subchannel>
+<package>
+ <name>G</name>
+ <summary>A fake package</summary>
+ <description>A fake package</description>
+ <section>misc</section>
+ <history>
+ <update>
+ <hid>12345</hid>
+ <epoch>0</epoch>
+ <version>1.0</version>
+ <release>1</release>
+ <filename>foo.bar</filename>
+ <filesize>123</filesize>
+ <installedsize>234</installedsize>
+ <md5sum>0f55f36a3240858038a281911605024e</md5sum>
+ <importance>suggested</importance>
+ <description>Yggdrasil Linux</description>
+ </update>
+ </history>
+ <provides>
+ <dep name="x" op="(any)" version="1.0"/>
+ </provides>
+</package>
+<package>
+ <name>A</name>
+ <summary>A fake package</summary>
+ <description>A fake package</description>
+ <section>misc</section>
+ <history>
+ <update>
+ <hid>12345</hid>
+ <epoch>0</epoch>
+ <version>1.0</version>
+ <release>1</release>
+ <filename>foo.bar</filename>
+ <filesize>123</filesize>
+ <installedsize>234</installedsize>
+ <md5sum>0f55f36a3240858038a281911605024e</md5sum>
+ <importance>suggested</importance>
+ <description>Yggdrasil Linux</description>
+ </update>
+ </history>
+ <requires>
+ <dep name="b" op="(any)" version="1.0"/>
+ </requires>
+ <provides>
+ <dep name="a" op="(any)" version="1.0"/>
+ </provides>
+</package>
+<package>
+ <name>B</name>
+ <summary>A fake package</summary>
+ <description>A fake package</description>
+ <section>misc</section>
+ <history>
+ <update>
+ <hid>12345</hid>
+ <epoch>0</epoch>
+ <version>1.0</version>
+ <release>1</release>
+ <filename>foo.bar</filename>
+ <filesize>123</filesize>
+ <installedsize>234</installedsize>
+ <md5sum>0f55f36a3240858038a281911605024e</md5sum>
+ <importance>suggested</importance>
+ <description>Yggdrasil Linux</description>
+ </update>
+ </history>
+ <requires>
+ <dep name="c" op="(any)" version="1.0"/>
+ </requires>
+ <provides>
+ <dep name="b" op="(any)" version="1.0"/>
+ </provides>
+ <conflicts>
+ <dep name="e" op="(any)" version="1.0"/>
+ </conflicts>
+</package>
+<package>
+ <name>C</name>
+ <summary>A fake package</summary>
+ <description>A fake package</description>
+ <section>misc</section>
+ <history>
+ <update>
+ <hid>12345</hid>
+ <epoch>0</epoch>
+ <version>1.0</version>
+ <release>1</release>
+ <filename>foo.bar</filename>
+ <filesize>123</filesize>
+ <installedsize>234</installedsize>
+ <md5sum>0f55f36a3240858038a281911605024e</md5sum>
+ <importance>suggested</importance>
+ <description>Yggdrasil Linux</description>
+ </update>
+ </history>
+ <provides>
+ <dep name="c" op="(any)" version="1.0"/>
+ </provides>
+</package>
+<package>
+ <name>D</name>
+ <summary>A fake package</summary>
+ <description>A fake package</description>
+ <section>misc</section>
+ <history>
+ <update>
+ <hid>12345</hid>
+ <epoch>0</epoch>
+ <version>1.0</version>
+ <release>1</release>
+ <filename>foo.bar</filename>
+ <filesize>123</filesize>
+ <installedsize>234</installedsize>
+ <md5sum>0f55f36a3240858038a281911605024e</md5sum>
+ <importance>suggested</importance>
+ <description>Yggdrasil Linux</description>
+ </update>
+ </history>
+ <provides>
+ <dep name="d" op="(any)" version="1.0"/>
+ <dep name="c" op="(any)" version="1.0"/>
+ </provides>
+</package>
+<package>
+ <name>E</name>
+ <summary>A fake package</summary>
+ <description>A fake package</description>
+ <section>misc</section>
+ <history>
+ <update>
+ <hid>12345</hid>
+ <epoch>0</epoch>
+ <version>1.0</version>
+ <release>1</release>
+ <filename>foo.bar</filename>
+ <filesize>123</filesize>
+ <installedsize>234</installedsize>
+ <md5sum>0f55f36a3240858038a281911605024e</md5sum>
+ <importance>suggested</importance>
+ <description>Yggdrasil Linux</description>
+ </update>
+ </history>
+ <provides>
+ <dep name="c" op="(any)" version="1.0"/>
+ <dep name="e" op="(any)" version="1.0"/>
+ <dep name="x" op="(any)" version="1.0"/>
+ </provides>
+</package>
+</subchannel></channel>