В качестве альтернативы явному построению хэша URI пространства имен вы можете получить определения пространства имен из элемента xml, где они определены.
Используя ваш пример:
# First grab the metadata node, because that's where "dc" is defined.
metadata = doc.at_xpath('//xmlns:metadata')
# Pass metadata's namespaces as the resolver.
metadata.at_xpath('dc:title', metadata.namespaces)
Обратите внимание, что второй xpath также мог быть:
doc.at_xpath('//dc:title', metadata.namespaces).to_s
Но зачем искать в корне, если у вас есть более близкий предок?Кроме того, вы должны рассматривать элемент, определяющий пространство имен, плюс его дочерние элементы как «область» пространства имен.Поиск в ограниченной области менее запутан и позволяет избежать мелких ошибок.