- PR -

xpathでの親の表示について

1
投稿者投稿内容
ぷるお
会議室デビュー日: 2004/07/03
投稿数: 2
投稿日時: 2004-07-03 02:18
@ITのXindice:無料で使えるXMLデータベース
を勉強し始めたものですが
XindiceServlet.java
をベースにhtmlと連携させて検索機能を付けようと思っているのですが
まずXMLデータとしては以下のものがあります
<key_list>
<key_t type="" id="1">
<name>科目</name>
<keywords>
<k_word>国語</k_word>
<k_word>理科</k_word>
</keywords>
</key_t>
<key_t ......>
</key_t>
<key_t ......>
</key_t>

</key_list>
というように key_listの中にkey_t という子がたくさんあり
Xpathを

//key_t/keyword[k_name="国語"]
(国語の部分はhtmlからwordとしてjavaに渡して)

xpath = "//key_t/keywords[k_word=\'" + word + "\']"
とすると返ってくるのは


<?xml version="1.0" encoding="Shift_JIS" ?>
<result>
<keywords src:col="/db/recipedb" src:key="" xmlns:src="http://xml.apache.org/xindice/Query">
<k_word>国語</k_word>
<k_word>理科</k_word>
</keywords>
</result>

なのですが
これを
<?xml version="1.0" encoding="Shift_JIS" ?>
<result>
<keywords src:col="/db/recipedb" src:key="" xmlns:src="http://xml.apache.org/xindice/Query">
<key_t type="" id="1">
<name>科目</name>
<keywords>
<k_word>国語</k_word>
<k_word>理科</k_word>
</keywords>
</key_t>

と親まで返ってくるようにしたいのですが
これはXpathを 改変すれば実現可能なのでしょうか?

それができないとなるとプログラムを変えて、1次検索を行い
該当するもののkey_tの属性のidを保持しておいて
2次検索としてそれをxindiceに渡して検索させるべきなのかな
と考えているのですが

どうしても煮詰まってしまいご教授、アドバイスをお願いいたします

環境としては
Windows XP
Tomcat 4.1.30
Xindice 1.0
Java j2sdk1.4.0_03
です
ぷるお
会議室デビュー日: 2004/07/03
投稿数: 2
投稿日時: 2004-07-03 03:21
すみません

//key_t[keyword[k_name="国語"]]

としたらできました

それはできたのですが
絞込み検索のために
選択されたもののkey_t の属性id を保持しておきたいのですが
それの実装はどうすればよいのでしょうか?

XindiceServlet.java


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

// 6. ResourceSetから検索結果を取り出す
ResourceIterator results = resultSet.getIterator();
while (results.hasMoreResources()) {
Resource res = results.nextResource();
if (res.getResourceType().equals("XMLResource")) {
org.xmldb.api.modules.XMLResource xmlres =
(org.xmldb.api.modules.XMLResource)res;
org.w3c.dom.Node node = xmlres.getContentAsDOM();

resultElement.appendChild(resultDocument.importNode(node.getFirstChild(), true));
}
}

辺りを変えないといけないかなと漠然と考えているくらいなんですが

ご教授お願いします
1

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