関連記事の目次はこちら


お次は XMLファイルの内容を読み取る。しかし、読み取るには「ファイルの構造」を知っておく必要がある。

サンプルの場合
・<records>の下に<prefectural>が複数ある。
・<prefectural>の下に<name></name> と <capital></capital> がひとつずつある。
・<prefectural>は、id と area という属性を持つ。

である。

ということを念頭に、いくつか読み取りサンプルを書く。
ベースは前回のものに少し手を加えたものを使う。修正した箇所、更に使い回すため

Sub ReadXML()

Dim XDoc As MSXML2.DOMDocument
Dim Node As MSXML2.IXMLDOMNode ' 追加

Set XDoc = New MSXML2.DOMDocument

If XDoc.Load(ThisWorkbook.Path & "\sample01.xml") = False Then
' 読み込み失敗時
With XDoc.parseError
Debug.Print .errorCode & " / " & Replace(.reason, vbCrLf, "")
Debug.Print "行 :" & .Line & " , カラム :" & .linepos
Debug.Print "内容 :" & .srcText
Debug.Print ""
Debug.Print "ファイル(URL) :" & .URL
Debug.Print "ファイル先頭からの位置 :" & .filepos
End With

Exit Sub
End If

Debug.Print "読み込み成功"

'この行を、以下のサンプルコードと入れ替えて使用する

Set XDoc = Nothing

End Sub


早速始める。
県名の取得 -----------------------
まずは県名を順次取得する。県名は XML上、name としている。
県名は、records の下の prefectural の name の内容である。この場合、スラッシュで区切ってパスを示すとよい。records/prefectural/name てな具合である。
    For Each Node In XDoc.selectNodes("/records/prefectural/name")
Debug.Print Node.Text
Next

結果は

北海道
青森
鹿児島
沖縄

となる。

県庁所在地の取得 --------------------
県庁所在地の取得はこうなる。県庁所在地はXML上、capital としている。
    For Each Node In XDoc.selectNodes("/records/prefectural/capital")
Debug.Print Node.Text
Next

結果は

札幌
青森
鹿児島
那覇

となる。

県名も県庁所在地も関係なく取得 -------------
県名も県庁所在地も関係あるか!と言う場合はこういうこともできる。要するに、/records/prefectural/以下のものを順次見つけられればよいってことである。
    For Each Node In XDoc.selectNodes("/records/prefectural/*")
Debug.Print Node.Text
Next


結果は

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

となる。


次回は、もう少しバリエーションを広げてみる。