# rexml_xpath_attribute_query.rb # May 16, 2007 # require 'test/unit' require 'rexml/document' class TestRexmlXpathAttributeQuery < Test::Unit::TestCase # xmlstr1 and xmlstr2 only differ in the second line - namespaces in the root element @@xmlstr1 = ' http://www.google.com/calendar/feeds/me%40gmail.com http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com 2007-05-16T13:42:27.942Z 2007-05-15T03:29:28.000Z My Calendar Me me@gmail.com ' @@xmlstr2 = ' http://www.google.com/calendar/feeds/me%40gmail.com http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com 2007-05-16T13:42:27.942Z 2007-05-15T03:29:28.000Z My Calendar Me me@gmail.com ' # Fails def test_xpath_query do_test @@xmlstr1 end # Passes def test_xpath_query_no_namespace do_test @@xmlstr2 end def do_test(xmlString) hrefs = [ "http://www.google.com/calendar/feeds/me%40gmail.com/private/full", "http://www.google.com/calendar/feeds/me%40gmail.com/acl/full", "http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com" ] ctr=0 REXML::Document.new(xmlString).elements.each("feed/entry") do |element| @alternate_link = element.elements["link[@rel='alternate']"] assert_not_nil( @alternate_link ) assert_equal( hrefs[ctr], @alternate_link.attributes['href']) ctr += 1 end end def test_another_way doc = REXML::Document.new(@@xmlstr1) hrefs = [ "http://www.google.com/calendar/feeds/me%40gmail.com/private/full", "http://www.google.com/calendar/feeds/me%40gmail.com/acl/full", "http://www.google.com/calendar/feeds/me%40gmail.com/me%40gmail.com" ] ctr=0 REXML::XPath.each(doc, "//link[@rel='alternate']") do |element| @alternate_link = element assert_not_nil @alternate_link assert_equal( hrefs[ctr], @alternate_link.attributes['href']) ctr += 1 end end end