Но зачем искать из корня, когда у тебя есть более близкий предок? Кроме того, вы должны рассматривать элемент, определяющий пространство имен, плюс его дочерние элементы как «область» пространства имен. Поиск в ограниченной области менее запутан и позволяет избежать мелких ошибок.

аюсь вытащитьdc:title элемент с использованием xpath. Я могу извлечь метаданные, используя следующий код.

doc = <<END
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0">
  <metadata xmlns:dc="URI">
    <dc:title>title text</dc:title>
  </metadata>
</package>
END

doc = Nokogiri::XML(doc)

# Awesome this works!
puts '//xmlns:metadata'
puts doc.xpath('//xmlns:metadata')
# => <metadata xmlns:dc="URI"><dc:title>title text</dc:title></metadata>

Как вы можете видеть выше, похоже, работает правильно. Однако мне кажется, что я не могу получить информацию о заголовке из этого дерева узлов, все нижеприведенное дает сбой.

puts doc.xpath('//xmlns:metadata/title')
# => nil

puts doc.xpath('//xmlns:metadata/dc:title')
# => ERROR: `evaluate': Undefined namespace prefix

puts doc.xpath('//xmlns:dc:title')
# => ERROR: 'evaluate': Invalid expression: //xmlns:dc:title

Может кто-нибудь объяснить, как пространства имен должны использоваться в xpath с вышеупомянутым документом xml.

Ответы на вопрос(3)

Ваш ответ на вопрос