我有以下xml文件:
<?xml version='1.0' encoding='UTF-8'?>
<sparql xmlns='http://www.w3.org/2005/sparql-results#'>
<head>
<variable name='s'/>
</head>
<results>
<result>
<binding name='s'>
<uri>http://data.open.ac.uk/podcast/c9ddc42f6e1db95f59c83312d62da0ee</uri>
</binding>
</result>
<result>
<binding name='s'>
<uri>http://data.open.ac.uk/podcast/18873effb6c38ed83a7522ffb7c61c1b</uri>
</binding>
</result>
</results>
</sparql>
我想从文档中获取uri。我尝试了以下命令:
doc = Nokogiri::XML(File.open("file.xml"))
doc.xpath("//uri")
但它返回零。
但是,如果我将文件修改为:
<results>
<result>
<binding name='s'>
<uri>http://data.open.ac.uk/podcast/c9ddc42f6e1db95f59c83312d62da0ee</uri>
</binding>
</result>
<result>
<binding name='s'>
<uri>http://data.open.ac.uk/podcast/18873effb6c38ed83a7522ffb7c61c1b</uri>
</binding>
</result>
</results>
以上命令正确返回uri。
您需要指定要选择的元素的名称空间。在第一个文档中,这是从根节点继承的http://www.w3.org/2005/sparql-results#
。在第二个文档中,它是有效的,因为您通过移除根节点来移除命名空间声明。
好消息是,您的命名空间是在根节点中定义的。Nokogiri会自动为您注册它,并且您应该能够使用选择<uri>
元素
doc.xpath("//xmlns:uri")