投稿日 | : 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(@*,'ク')]")
のようにして、『値が"ク"で始まる属性を持つノード』を探す事もできます。