JavaからeXistに接続

作成したサンプルデータにjavaからアクセスしてみます。

プログラムの実行には、
・eXistインストールフォルダ直下のexist.jar
・/lib/coreにある、xmldb.jar、xmlrpc-1.2-patched.jar、log4j-1.2.14.jarが必要です。


コレクションへの接続とドキュメント名称検索

testコレクションへ接続し、sample.xmlドキュメントを取り出してみます。


try {
	Class clazz = Class.forName("org.exist.xmldb.DatabaseImpl");
	Database database = (Database) clazz.newInstance();
	DatabaseManager.registerDatabase(database);

	Collection col = DatabaseManager.getCollection(
	  "xmldb:exist://localhost:5555/exist/xmlrpc/db/test","admin","");

	XMLResource res = (XMLResource)col.getResource("sample.xml");
	System.out.println(res.getContent());

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

実行結果

<root>
    <data>

        <ken id="1">
            <name>北海道</name>
            <comment>出張で行ったことあります。</comment>
        </ken>
        <ken id="2">

            <name>青森</name>
            <comment>まだ、行ったことありません。</comment>
        </ken>
        <ken id="3">
            <name>秋田</name>

            <comment>上司の奥さんの出身地です。</comment>
        </ken>
        <ken id="4">
            <name>岩手</name>
            <comment>まだ、行ったことありません。</comment>

        </ken>
        <ken id="5">
            <name>山形</name>
            <comment>学生時代に行ったことがあります。</comment>
        </ken>

    </data>
</root>

XPathで検索

今度はXPathで検索してみます。


try {
	Class clazz = Class.forName("org.exist.xmldb.DatabaseImpl");
	Database database = (Database) clazz.newInstance();
	DatabaseManager.registerDatabase(database);

	Collection col = DatabaseManager.getCollection(
			"xmldb:exist://localhost:5555/exist/xmlrpc/db/test","admin", "");

	XPathQueryService service = (XPathQueryService) col.getService(
			"XPathQueryService", "1.0");
	ResourceSet result = service.query("/root/data/ken[@id='3']");
	ResourceIterator i = result.getIterator();
	while (i.hasMoreResources()) {
		Resource r = i.nextResource();
		System.out.println((String) r.getContent());
	}

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

実行結果


<ken id="3">
    <name>秋田</name>
    <comment>上司の奥さんの出身地です。</comment>
</ken>

XUpdateで更新

XUpdateでデータを更新してみます。


try {
	Class clazz = Class.forName("org.exist.xmldb.DatabaseImpl");
	Database database = (Database) clazz.newInstance();
	DatabaseManager.registerDatabase(database);

	Collection col = DatabaseManager.getCollection(
			"xmldb:exist://localhost:5555/exist/xmlrpc/db/test","admin", "");

	XUpdateQueryService service = 
		  (XUpdateQueryService) col.getService("XUpdateQueryService", "1.0");

	StringBuffer xupdate = new StringBuffer();
	xupdate.append("<modifications version=\"1.0\" xmlns=\"http://www.xmldb.org/xupdate\">");
	xupdate.append("	<update select=\"/root/data/ken[@id='4']/comment\">今年、行く予定です。");
	xupdate.append("</update>");
	xupdate.append("</modifications>"); 

	service.update(xupdate.toString());

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

実行結果


<root>
    <data>
        <ken id="1">
            <name>北海道</name>
            <comment>出張で行ったことあります。</comment>

        </ken>
        <ken id="2">
            <name>青森</name>
            <comment>まだ、行ったことありません。</comment>
        </ken>

        <ken id="3">
            <name>秋田</name>
            <comment>上司の奥さんの出身地です。</comment>
        </ken>
        <ken id="4">

            <name>岩手</name>
            <comment>今年、行く予定です。</comment>
        </ken>
        <ken id="5">
            <name>山形</name>

            <comment>学生時代に行ったことがあります。</comment>
        </ken>
    </data>
</root>



もどる