- - PR -
selectNodesメソッドで複数条件を指定したい
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-11-05 12:50
初めまして。早速で失礼ですが、質問させていただきます。
<名簿> <人事データ> <名前>田中一郎</名前> <出身>コンガ</出身> <生年月日>1950.12.1</生年月日> </人事データ> <名前>小林二郎</名前> <出身>ンジャメナ</出身> <生年月日>1956.11.5</生年月日> <人事データ> <人事データ> : : </名簿> 上記のような構成のXMLから、出身と生年月日を指定して 該当する「人事データ」の件数を取得したい場合、 selectNodesメソッドはどのように記述すればよいのでしょうか。 本などで調べたところ、 var list = document.documentElement.selectNodes("人事データ/出身[.='コンガ']"); alert(list.length); のような記述例は見つかったのですが、引数に渡すXPATH式で 「出身がコンガ&名前が田中一郎」というような内容を記述する方法がわかりません。 基礎的なことかもしれませんが、手持ちの資料も一通り見てしまったので どなたかご存知の方にご意見頂きたいと思います。 よろしくお願いいたします。 |
|
投稿日時: 2002-11-05 14:54
すみません。タグの記述にミスがありました。
小林二郎の人事データに開始タグを記入し忘れましたが 構成は以下のつもりで書きました。 名簿 ├人事データ | ├名前 | ├出身 | └生年月日 ├人事データ ├人事データ : : [ メッセージ編集済み 編集者: Cookie 編集日時 2002-11-05 14:54 ] |
|
投稿日時: 2002-11-05 17:02
"人事データ/出身[.='コン ガ'][../名前='田中一郎']"
|
|
投稿日時: 2002-11-05 17:15
>MMX様
ありがとうございました!正しく実行出来ました。 ということは同様に↓のように書き換えられ、意味も同じということですよね。 "人事データ[./出身='コンガ'][./名前='田中一郎']" 勉強になりました。初心者な質問ですみませんでした。 ありがとうございます。 |
|
投稿日時: 2002-11-06 10:03
たびたびすみません。
上記の条件指定について、一致ではなくあいまい検索をかけたかったのですが、 "人事データ[./出身='コンガ'][contains(./名前,'田中一郎')]" "人事データ[./出身='コンガ'][substring-before(./名前,'一郎')='田中']" のような記述をしたところ、JavaScriptでランタイムエラーが発生してしまいました。 行:(略) エラー:不明な方法です。 XSLでの記述時は正常に実行出来たのですが、JavaScriptのselectNodesメソッドの中では 使用できないのでしょうか? |
|
投稿日時: 2002-11-06 13:55
自己レスです。
上記の件、開発しているのはIE6.0(MSXML4)なのですが、 MSXML4について >selectNodesとかselectSingleNodeでデフォルトの名前空間に対して >XPathで指定できないんだけど、これってバグ? という書き込みを見つけました(某掲示板より)。 この方はMSXML3に変えたら普通に実行できたとのことです。 IE6.0のJavaScriptでは、私がやろうとしていることは不可能なんでしょうか? タグ構成を変えるか、NodeListをプログラムでさらに絞り込むかするしか ないのでしょうか。 まだまだXMLについては初心者のため、ステップ数やコーディング効率から selectNodesメソッドがシンプルで良さそうかな?と目をつけただけですので、 本来の使い方から外れていたり、もっと本道なやり方をご存知の方は ご指摘いただければ幸いです。 基本的な動作なので、出来ないはずはないと思うのですが… 私も本を6〜7冊山積みにして調べています。 進歩があったら報告に参ります。 |
|
投稿日時: 2002-11-07 15:32
"人事データ[(出身='コンガ') and (contains(名前,'田中一郎'))]"
では?IE6とMSXML4との関係は?ヘルプの Implementing MSXML 4.0 in Web Scripting の形にはなっているでしょうか Limitation of Side-by-Side Mode には、データアイランドの非対応が書いてます, Side-by-Side ではIE自身が内部で呼ぶのはMSXML3のままとか?。 [ メッセージ編集済み 編集者: MMX 編集日時 2002-11-08 00:11 ] |
|
投稿日時: 2002-11-12 22:09
>MMX様
たびたびありがとうございます。 上記の自分の書き込み、カキコの解釈違いのようでした…(^-^; すみません。 >"人事データ[(出身='コンガ') and (contains(名前,'田中一郎'))]" 同形式の記述をしてみましたが、やはり「不明な方法です。」エラーが出ました。 これを、複合条件ではなく人事データ[(contains(名前,'田中一郎'))]だけ記述しても 同じエラーが出てしまいます。 [(-->contains<--(名前,'田中一郎'))] このような感じでエラー行が表示されます。 その他、substring-beforeやconcat等の関数も、同様のエラーが出て 使用できませんでした。 MMX様の仰るヘルプはまだ調べていませんでした。 調査不足ですね…もう少し調べてみます。 |