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")

しかし、それはnilを返します。

ただし、ファイルを次のように変更した場合:

<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>

上記のコマンドは uris を正しく返します。

4

1 に答える 1

2

選択しようとしている要素の名前空間を指定する必要があります。最初のドキュメントではhttp://www.w3.org/2005/sparql-results#、ルート ノードから継承された です。2 番目のドキュメントでは、そのルート ノードを削除して名前空間宣言を削除しているため、機能します。

<uri>良いニュースは、ネームスペースがルートノードで定義されているため、Nokogiri が自動的に登録し、要素を選択できるようになることです。

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