- PR -

XindiceのXPathについて

投稿者投稿内容
tam
会議室デビュー日: 2003/12/10
投稿数: 6
投稿日時: 2003-12-10 14:49
はじめまして。既出の質問だったらすいません。
今、Xindiceを使ってJAVAのプログラムを作成しているのですが、
XPathで検索して、結果として、テキストだけを得たいときはXPATHをどのように
書けばよいのでしょうか?

例えば、
<A>
<B>abc</B>
</A>
というXMLがXindiceに登録されているとすると
abcというテキストだけ取り出したいのです。

XPATH = "/A/B"とすると、<B>abc</B>だけが返ってきて、テキストだけ
取り出すことはできません。どのようなXPathを書けばよいのでしょうか?

初歩的な質問ですいません。
誰か教えていただけないでしょうか。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-10 14:58
引用:

XPATH = "/A/B"とすると、<B>abc</B>だけが返ってきて、テキストだけ
取り出すことはできません。どのようなXPathを書けばよいのでしょうか?


あるノードの子ノードとして存在するテキスト要素を取り出す場合はtext()関数(?)を使います。
コード:
XPATH = "/A/B/text()"


でどうでしょうか?
tam
会議室デビュー日: 2003/12/10
投稿数: 6
投稿日時: 2003-12-10 15:04
返事どうもありがとうございます。

私もその方法でできると思ったんですけど、コマンドプロンプトから検索をしてみても、
JAVAのプログラム内で行ってもできませんでした。

他に書き方はないんですかね?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-10 15:35
引用:

私もその方法でできると思ったんですけど、コマンドプロンプトから検索を
してみても、JAVAのプログラム内で行ってもできませんでした。


そのJavaプログラムというのは見せて頂けませんか?
XPathとしてはこの書き方
コード:
XPATH = "/A/B/text()"


が正しい筈なんですが。
tam
会議室デビュー日: 2003/12/10
投稿数: 6
投稿日時: 2003-12-11 12:36
返事が遅れました。すいません。

JAVAのプログラムは、ここのホームページのXindiceが紹介されている記事と
全く同じものです。(扱うXML文書は違いますが)

その記事というのは、このスレッドの参照記事となっている記事です。

記事に書かれてある通りにプログラムを作成して、XPATH="/"で実行したときは、
うまく動いたのですが、XPATH="/A/B/text()"は結果として、何も返してきませんでした。

コマンドプロンプトで同様に、
xindiceadmin xpath -c /db -q /A/B/text()
を実行しても、結果として何も返してきませんでした。

他になにか解決方法がありましたら、教えていただけないでしょうか?
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-14 23:41
すみません。レスが遅れました。
引用:

記事に書かれてある通りにプログラムを作成して、XPATH="/"で実行したときは、
うまく動いたのですが、XPATH="/A/B/text()"は結果として、何も返してきませんでした。


こちらですが、まず「XPATH="/"で実行したときは、うまく動いた」時の結果を
こちらに示して頂けませんか?XPathの問題でない可能性もありますので。
tam
会議室デビュー日: 2003/12/10
投稿数: 6
投稿日時: 2003-12-16 12:36
今、私が作成しているプログラムは、サーブレットプログラムなんですが、

XPATH="/"で検索したときの結果は、

<?xml version="1.0"?>
<A xmlns:src="http://xml.apache.org/xindice/Query" src:col="/db/tmp" src:key="tmp">
<B>
abc
</B>
</A>
これがブラウザに表示されます。

XPATH="/A/B/text()"で検索した場合、nullがブラウザに表示されます。

もしかしたら、XPATHの検索結果を取り出して、表示する部分がおかしいかもしれません。
検索して結果を取り出して表示する部分は、下のようなプログラムになってます。
(記事のそのままです。)

// XPathで検索
ResourceSet resourceSet = service.query(xpath);

// ResourceSetから検索結果を取り出す
ResourceIterator resources = resourceSet.getIterator();
   while (resources.hasMoreResources()) {
Resource resource = resources.nextResource();
if (resource.getResourceType().equals("XMLResource")) {
     // 内容を文字列として表示
request.setAttribute("DOC",(String)resource.getContent());
}
}

私の勉強不足で、このプログラムの意味がよく分からないまま使っています。
自分でも勉強して理解するようにしますが、もしおかしい部分があれば、
指摘していただきたいです。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-16 16:34
今ちょっとXindiceのページを見たのですが、
どうもXML:DB APIというのを実装している様ですね。
ただ、これが提供しているXML:DB APIはWorking Draftのようです。

もしかして、標準化自体が途上であるためAPIの策定も出来てなくて、
XindiceのXML:DB API実装の方もまだまだだとか、そういうことはありませんかね。
XPathの検索で返される結果ツリーフラグメントがテキスト要素1個だとダメだとか。
どうもXPathの問題では無い気がするのですが。。。

[ メッセージ編集済み 編集者: おばけ 編集日時 2003-12-16 16:36 ]

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