Symfoware

Symfowareについての考察blog

XMLデータベース eXistのデータをJavaで検索する

eXistへの接続とデータ登録が行えたので、データの検索を行ってみます。

XPathで検索



id='0000000001'のデータをXPathで検索するサンプルです。



import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.Resource;
import org.xmldb.api.base.ResourceIterator;
import org.xmldb.api.base.ResourceSet;
import org.xmldb.api.modules.XPathQueryService;

public class Sample {
    
    public static void main(String[] args) {
        
        try {
            Class clazz = Class.forName("org.exist.xmldb.DatabaseImpl");
            Database database = (Database) clazz.newInstance();
            DatabaseManager.registerDatabase(database);

            Collection col = DatabaseManager.getCollection(
                    "xmldb:exist://192.168.1.251:8080/exist/xmlrpc/db/book",
                    "admin", "");

            //XPathQueryServiceの取得
            XPathQueryService service = (XPathQueryService) col.getService("XPathQueryService", "1.0");
            
            //XPathで検索
            ResourceSet resultSet = service.query("//doc[id='0000000001']");
            
            //ResourceSetから検索結果を取り出す
            ResourceIterator results = resultSet.getIterator();
            
            while (results.hasMoreResources()) {
                Resource res = results.nextResource();
                if (res.getResourceType().equals("XMLResource")) {
                    System.out.println(res.getContent());
                }
            }

            col.close();

            System.out.println("検索成功");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



//doc[id='0000000001']
というXPath検索を行い、結果を取得しています。

実行結果は以下のとおり。


<doc>
    <id>0000000001</id>
    <title>タイトル</title>
    <category>小説</category>
    <pub_date>2006年08月</pub_date>
</doc>
検索成功



ちゃんと登録しているデータが取得できました。



xqueryによる検索



xqueryによる検索も同様のコードで行えます。


import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.Resource;
import org.xmldb.api.base.ResourceIterator;
import org.xmldb.api.base.ResourceSet;
import org.xmldb.api.modules.XPathQueryService;

public class Sample {
    
    public static void main(String[] args) {
        
        try {
            Class clazz = Class.forName("org.exist.xmldb.DatabaseImpl");
            Database database = (Database) clazz.newInstance();
            DatabaseManager.registerDatabase(database);

            Collection col = DatabaseManager.getCollection(
                    "xmldb:exist://192.168.1.251:8080/exist/xmlrpc/db/book",
                    "admin", "");

            //XPathQueryServiceの取得
            XPathQueryService service = (XPathQueryService) col.getService("XPathQueryService", "1.0");
            
            //xqueryで検索
            StringBuffer query = new StringBuffer();
            query.append("for $input in (//doc)");
            query.append(" where ($input[id='0000000001'])");
            query.append(" return $input");
            //ResourceSet resultSet = service.query("//doc[id='0000000001']");
            ResourceSet resultSet = service.query(query.toString());
            
            //ResourceSetから検索結果を取り出す
            ResourceIterator results = resultSet.getIterator();
            
            while (results.hasMoreResources()) {
                Resource res = results.nextResource();
                if (res.getResourceType().equals("XMLResource")) {
                    System.out.println(res.getContent());
                }
            }

            col.close();

            System.out.println("検索成功");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



for $input in (//doc)
where ($input[id='0000000001'])
return $input
というxqueryを発行することで、XPathの時と同様の結果を得ています。

xqueryの方が、ソート指定できたり、帰ってくる値を任意に加工できるので
覚えておいて損はないかと。


関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2009/11/03(火) 12:35:37|
  2. eXist
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<XMLデータベース eXistのデータをJavaで削除する | ホーム | XMLデータベース eXistにJavaからデータを登録する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/202-ffa54ae3
この記事にトラックバックする(FC2ブログユーザー)