We use the gem rspec-sitemap-matchers
to validate and parse some sitemap files, but it can’t validate against the sitemap standard XSD, so here’s the code snippet.
. / spec / support / matchers / valid_sitemap_matcher . rb
require 'rspec/expectations'
module ValidSitemapExpectations
extend RSpec :: Matchers :: DSL
sitemap_xsd = Nokogiri :: XML :: Schema ( File . open ( 'sitemap.xsd' ))
sitemap_index_xsd = Nokogiri :: XML :: Schema ( File . open ( 'sitemapindex.xsd' ))
matcher :have_valid_sitemap_xml do
match do | thing |
doc = Nokogiri :: XML ( thing )
sitemap_xsd . valid? ( doc )
end
failure_message do | thing |
doc = Nokogiri :: XML ( thing )
errors = sitemap_xsd . validate ( doc ). map ( & :message ). join ( " \n " )
"Was not valid sitemap XML. \n\n #{ errors } \n "
end
end
matcher :have_valid_sitemap_index_xml do
match do | thing |
doc = Nokogiri :: XML ( thing )
sitemap_index_xsd . valid? ( doc )
end
failure_message do | thing |
doc = Nokogiri :: XML ( thing )
errors = sitemap_index_xsd . validate ( doc ). map ( & :message ). join ( " \n " )
"Was not valid sitemap index XML. \n\n #{ errors } \n "
end
end
end
This is used in RSpec expectations to ensure that the sitemap generated is valid against the sitemap standard .