- PR -

selectNodesの結果をXSLTでソート

1
投稿者投稿内容
谷岡
会議室デビュー日: 2002/02/15
投稿数: 2
投稿日時: 2002-02-15 06:34
皆様はじめまして。XMLの勉強を始めて1ヶ月の谷岡と申します。
今XML、XSLT、JavaScriptを使い簡単なデータベースを作ろうとしているのですが
行き詰まってしまい投稿させて頂きました。

やりたい事は
XMLデータをXQLで抽出し、その結果をXSLTでソートしてHTMLの表として表示
という単純なことです。
しかしselectNodesの結果をXSLTでソートさせる方法がわからないのです。

作ったソース等は私のWebページにアップしてあります。
http://www.lares.dti.ne.jp/~taniyan/XMLtest/xmlindex.htm
どうかご教授お願います。

これがやろうとしてうまく行かないソースです。
temp.transformNode(style.XMLDocument)がうまくいっていないと思うのですが、プログラミング自体まだまだ初心者なもので(^^;

<HTML>
<HEAD>
<TITLE>XQL&XSLT&JavaScript</TITLE>
<XML id="source"src = "MSDATA.xml"></XML>
<XML id="style" src = "msdata.xsl"></XML>
<SCRIPT LANGUAGE = "JavaScript">
function applyXQL()
{
var query = document.myForm.query.value; 
var temp = "";
var items = source.selectNodes(query);
for(var i = 0; i < items.length; ++i)
{
temp += items.item(i).xml + "\n";
}
result.innerHTML = temp.transformNode(style.XMLDocument);
}
</SCRIPT>
</HEAD>

<BODY>
<FORM name="myForm">
<INPUT name="query" type="text" size="60" value="//MSDATA[所属="連邦"]"><br/> <!-- 例)連邦のMSを抽出 -->
<INPUT type="button" value="適用" onclick="applyXQL()"><br/>
</FORM>
 
<!-- 結果表示領域 -->
<p id="result"></p>

</BODY>
</HTML>
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2002-02-17 10:51
temp の型に transformNode は適用できますか?
"//MSDATA[所属="連邦"]" ""の入れ子、漢字コードとかも
コンパイラ言語の気持ちで考えたらどうでしょう
なのほ
会議室デビュー日: 2001/12/21
投稿数: 9
投稿日時: 2002-02-18 13:36
function applyXQL()
{
var query = document.myForm.query.value; 
var temp = "";
var items = source.selectNodes(query);
var xmlDom = new ActiveXObject("Msxml2.DOMDocument");
xmlDom.async = false;
temp="<dataroot>\n"
for(var i = 0; i < items.length; ++i)
{
temp += items.item(i).xml + "\n";
}
temp +="</dataroot>"
xmlDom.loadXML(temp)
result.innerHTML = xmlDom.transformNode(style.XMLDocument);
}

いったんテキストをDomDocumentに格納しましょう。

雑談
サイコミュ試験用ザクの形式番号がふたつありますね。
当初はザクから派生型として試験機が作成されていたから
暫定的にMS-06Zが付けられていたけど、
ニュータイプ用の計画に移行したからMSN-00に変更されたのかなぁ?
谷岡
会議室デビュー日: 2002/02/15
投稿数: 2
投稿日時: 2002-02-19 03:14
MMX様、なのほ様 お返事ありがとうございます。

ちょっぴりXMLが楽しく感じてきた谷岡です。
お礼が遅くなり申し訳ございません。


おかげ様で何とか動くようになりました。

嬉しくて色々やっている内に、また悩み事が・・・・

XQLではあいまい検索ができなかったので何とかしようと思い、
探したらJavaScriptでのサンプルを見つけ何とか出来ましたが、
ソースが複雑になってしまいました。
他に何か簡単でよい方法は無いのでしょうか?

それと、ボタンで検索結果の表示方法を変更しようと思ったのですがうまく行きません。
別の関数内で
xmlDom.transformNode(style2.XMLDocument)を指定してもエラーに・・・・・
XSLのID名を変数にしてselectフォームから選択させようとしましたが失敗・・・・

検索後のtempが入ったxmlDomをapplyXQL()外で呼び出すには
どうすればよいのでしょうか?

仕方無いのでとりあえず再度処理をさせて見てくれだけは完成しましたが(^^;

質問ばかり申し訳無いのですが、ご教授お願い頂けないでしょうか


変更後のプログラム
http://www.lares.dti.ne.jp/~taniyan/XMLtest/xmlindex.htm
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2002-02-19 09:03
==検索後のtempが入ったxmlDomをapplyXQL()外で呼び出すには
スコープ・ルール(変数の有効範囲)とかを読めば解ります。(プログラム言語の解説では)

その前に、スタイルシートをパラメータ渡しで可変化して、XMLの2段処理を
1段にしてもよいのでは
XSL パラメータからの値の取得http://www.microsoft.com/japan/developer/workshop/xml/articles/xml06192000.asp
XSL の強化 / パラメータを使ってhttp://www.microsoft.com/japan/developer/workshop/xml/articles/enhancingxsl.asp#enhancingxsl_parameters
この場合は1度選択したレコードを使い回すようですから、関係ないかもしれないが。
1

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