您试图访问的节点有一个media
名称空间,因此您在尝试查找它时需要考虑这一点。
一般来说,我们会做一些事情,如:
require 'nokogiri'
xml = %q{
<xml xmlns:media="http://xml.my.org/file">
<media:content url="http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4" fileSize="15533795" type="video/mp4" />
</xml>
}
doc = Nokogiri::XML(xml)
doc.search('//media:content', 'media' => 'http://xml.my.org/file').each do |n|
puts n['url']
end
# >> http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4
引入nokogiri会自动注册了命名空间,如果它是在<xml>
标签定义,这意味着我们可以用一个简单的形式:
doc.search('//media:content').each do |n|
puts n['url']
end
# >> http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4
引入nokogiri还支持使用名称空间的CSS访问器:
doc.search('media|content').each do |n|
puts n['url']
end
# >> http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4
这将有助于了解指向您正在检索的XML的URL,或者有一个缩小的XML示例,包括'xmlns'声明。 – 2011-05-01 02:41:29