- PR -

Xindice1.0のXPathに関して

1
投稿者投稿内容
sgr
会議室デビュー日: 2006/12/25
投稿数: 2
投稿日時: 2006-12-25 11:03
以下のようなxmlから9月分のデータを取得するためにXPathを作成して検索しましたがデータを取得できません。

xpath : /top/group[date>='2006-09-01' and date<='2006-09-30']

どなたか、ご存知の方がおられましたら、ご教授願います。

少し長くなりますが、xmlデータとJava(1.4.2)のコードは、以下のようにしています。


【xmlデータ】

<top>
....
<group>
<date>2006-09-01</date>
<item>item1</item>
<value>100</value>
</group>
<group>
<date>2006-09-02</date>
<item>item2</item>
<value>200</value>
</group>
...
<group>
<date>2006-09-30</date>
<item>itemN</item>
<value>999</value>
</group>
<group>
<date>2006-10-15</date>
<item>itemX</item>
<value>1500</value>
</group>
</top>

【処理コード】

.....
String query_results = "";
String col_name = "data";
String query = "/top/group[date>='2006-09-01' and date<='2006-09-30']";
org.xmldb.api.base.Collection col = null;
try {
// Database実装クラスの登録
String driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
try {
Class c = Class.forName(driver);
Database database = (Database) c.newInstance();
DatabaseManager.registerDatabase(database);
} catch (Exception e) {
e.printStackTrace();
}
// コレクションの取得
col = DatabaseManager.getCollection(this.XindiceServer + col_name);
if (col != null) {
// XPathQueryServiceの取得
XPathQueryService service = (XPathQueryService) col.getService("XPathQueryService", "1.0");
// XPathで検索
ResourceSet resultSet = service.query(query);
// ResourceSetから検索結果を取り出す
ResourceIterator results = resultSet.getIterator();
query_results = "<Results>\\n";
while (results.hasMoreResources()) {
Resource res = results.nextResource();
String s = (String) res.getContent();
query_results += s + \\n;
}
query_results += "</Results>\\n";
}
} catch (XMLDBException e) {
e.printStackTrace();
} finally {
if (col != null) {
// コレクションのクローズ
try {
col.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("result="+query_results);
.....


以上、よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-12-26 10:48
試していませんが、

コード:

/top/group/date[text() >= '2006-09-01' and text() <= '2006-09-30']/ancestor::group


でどうでしょうか。もっと簡単な方法もあるのかもしれませんが…

[ メッセージ編集済み 編集者: uk 編集日時 2006-12-26 10:49 ]
sgr
会議室デビュー日: 2006/12/25
投稿数: 2
投稿日時: 2006-12-26 22:43
UKさん
ありがとうございました。
早速ためしてみます。


【自己レス】
日付部分のフォーマット部分をyyyyMMddに変更して
一応データを取得できるようになりました。


1

スキルアップ/キャリアアップ(JOB@IT)