Nokogiri/Xpath namespace query
All namespaces need to be registered when parsing. Nokogiri automatically registers namespaces on the root node. Any namespaces that are not on the root node you have to register yourself. This should work:
puts doc.xpath('//dc:title', 'dc' => "URI")
Alternately, you can remove namespaces altogether. Only do this if you are certain there will be no conflicting node names.
doc.remove_namespaces!
puts doc.xpath('//title')
With properly registered prefix opf
for 'http://www.idpf.org/2007/opf'
namespace URI, and dc
for 'URI'
, you need:
/*/opf:metadata/dc:title
Note: xmlns
and xml
are reserved prefixes that can't be bound to any other namespace URI than the built-in 'http://www.w3.org/2000/xmlns/'
and 'http://www.w3.org/XML/1998/namespace'
.