使用nokogiri分析XML文件



我有以下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")

相关内容

  • 没有找到相关文章