1

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

我想从文档中获取 uris。我尝试了这些命令:

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。

4

1 回答 1

2

您需要指定要选择的元素的命名空间。在第一个文档中http://www.w3.org/2005/sparql-results#,这是从根节点继承的。在第二个文档中它有效,因为您通过删除该根节点删除了命名空间声明。

好消息是因为你的命名空间是在根节点中定义的,Nokogiri 会自动为你注册它,你应该能够选择<uri>元素

doc.xpath("//xmlns:uri")
于 2013-07-26T09:47:44.803 回答