VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2004/07/21(Wed) 10:15
投稿者魔界の仮面弁士
Eメール
URL
タイトル蛇足: XPathの使い方

> 残念ながらXPath式はまったく存じませんので、やはりXMLでいこうと思います。

「やはりXMLで」という発言から察するに、どうやら、
XPath式に関して何か誤解がありそうなので、補足しておきます。


XPathとは、「XMLデータを検索/照会するための構文」の一つです。
データベースでいうところのSQLに相当します。

深い階層、複雑な階層などを簡単に取得出来ますし、XSLTでも使えますので、
XMLを扱うのであれば、覚えておくと便利だと思いますよ。


------------

MSXMLにてXPath式を使った検索を行うには、最初に、
  .setProperty "SelectionLanguage", "XPath"
を宣言してから、selectSingleNode または selectNodes を呼び出します。

なお、selectSingleNodeメソッドは、最初に一致するノードを返します。
selectNodesメソッドは、一致するノードをコレクションとして返します。



具体例で言えば、
  .setProperty "SelectionLanguage", "XPath"
  Dim XMLNodeList As IXMLDOMNodeList
  Set XMLNodeList = .selectNodes("//*[@*='in\']")
のようにすると、
  『値が"in\"である属性を持つノード』
という意味になります。
( [〜] の部分は述部といって、検索条件を指定する部分です)


この場合、先の No.9679 で提示したサンプルでいえば、
   <node text="in\">
     <node text="child1"/>
     <node text="child2"/>
   </node>
と、
   <node text="in\">
     <node text="child4"/>
   </node>
という、2件のノードセットを返すことになります。


この時に、さらに「子要素が2個の物」という条件を追加しておき、
  Set XMLNodeList = .selectNodes("//node[@text='in\' and count(*)=2]")
などと書く事もできます。(この場合、前者のノードセットだけが取得されます)


なお、上記の count() というのは、XPath 関数の一つです。他にも、
   Set XMLNodeList = .selectNodes("//*[starts-with(@*,'ク')]")
のようにして、『値が"ク"で始まる属性を持つノード』を探す事もできます。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -