Symfoware

Symfowareについての考察blog

XMLデータベース eXistのデータをJavaで削除する

eXistへデータの登録・検索が行えたので、削除を行ってみます。



import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.modules.XMLResource;

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", "");
            
            //削除したいドキュメントのオブジェクトを取得
            XMLResource document = (XMLResource) col.createResource("0000000001.xml","XMLResource");
            //削除実行
            col.removeResource(document);

            col.close();

            System.out.println("削除成功");

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




ドキュメントの名前がわかっている場合はあっさり完了。

条件を指定して削除する場合は、こんなコードでいけました。


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(query.toString());
            
            //ResourceSetから検索結果を取り出す
            ResourceIterator results = resultSet.getIterator();
            
            while (results.hasMoreResources()) {
                Resource res = results.nextResource();
                if (res.getResourceType().equals("XMLResource")) {
                    //削除実行
                    col.removeResource(res);
                }
            }

            col.close();

            System.out.println("削除成功");

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








関連記事

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

  1. 2009/11/04(水) 12:36:50|
  2. eXist
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<XMLデータベース eXist のサンプルアプリケーション | ホーム | XMLデータベース eXistのデータをJavaで検索する>>

コメント

コメントの投稿


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

トラックバック

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