関連記事の目次はこちら


読み取りのバリエーションを増やしてみる。

ベースとするソースコードはこちらに書いたものを使い回す。


早速始める。
まずは例。
    For Each Node In XDoc.selectNodes("/records/prefectural")
Debug.Print Node.Text
Next

結果は

北海道 札幌
青森 青森
鹿児島 鹿児島
沖縄 那覇

となる。

前回の最後と見比べていただくと、渡すパラメータは
前回:/records/prefectural/*
今回:/records/prefectural

と、/* があるかないか、の違いである。

さて、では「 / だけ残したらどうなる?」という疑問も湧くだろう。
/records/prefectural/
という場合だ。
    For Each Node In XDoc.selectNodes("/records/prefectural/")
Debug.Print Node.Text
Next

結果は、「DOMはノードを返しません」というエラーが発生した。残念ながら、これはNGである。




タグの名前も併せて取得 -----------------
これまで、いわば「内容」だけを取っていた。「項目」も見てみたい。
    For Each Node In XDoc.selectNodes("/records/prefectural")
Dim i As Integer
Dim Wk As String
Wk = ""
For i = 0 To Node.childNodes.Length - 1
Wk = Wk & Node.childNodes(i).nodeName & ":" & Node.childNodes(i).nodeTypedValue & " , "
Next i
Wk = Left(Wk, Len(Wk) - 2)

Debug.Print Wk
Next


この結果は

name:北海道 , capital:札幌
name:青森 , capital:青森
name:鹿児島 , capital:鹿児島
name:沖縄 , capital:那覇

となる。

今までは単にNodeという変数の Text プロパティを取得していただけだが、childNodes(n) ※言うまでもないが、nは変数。上記プログラムでFor文で変化しているもので、単なるアルファベットではない。の nodeName と nodeTypedValue を取得している。
childNodesの数だけ繰り返すので、全要素を出力することになる。


なお、プロパティでやたらと Node という綴り出てくる。ノード、というが「こぶ」とか「節」とかいう意味で、いまひとつピンとこない。
意味的にはclusterの方が理解しやすいのではないかと思う。その点、以下の書籍では上手に説明している。

XML-DB開発 実技コース (DB Magazine SELECTION)/下佐粉 昭

¥2,730
Amazon.co.jp


次回は、属性に触れる予定である。