我正在尝试使用xpath提取dc:title
元素。我可以使用以下代码提取元数据。
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
请问如何在上述XML文档中使用命名空间?
remove_namespace!
是首先尝试的最明智的事情。但要注意:如果您修改了此 XML 并将其提交给外部 API,则该 API 将(通常)拒绝它而不带命名空间。 - Simon Lepkin