関連記事の目次はこちら
お次は XMLファイルの内容を読み取る。しかし、読み取るには「ファイルの構造」を知っておく必要がある。
サンプルの場合
・<records>の下に<prefectural>が複数ある。
・<prefectural>の下に<name></name> と <capital></capital> がひとつずつある。
・<prefectural>は、id と area という属性を持つ。
である。
ということを念頭に、いくつか読み取りサンプルを書く。
ベースは前回のものに少し手を加えたものを使う。修正した箇所、更に使い回すため
早速始める。
県名の取得 -----------------------
まずは県名を順次取得する。県名は XML上、name としている。
県名は、records の下の prefectural の name の内容である。この場合、スラッシュで区切ってパスを示すとよい。records/prefectural/name てな具合である。
結果は
北海道
青森
鹿児島
沖縄
となる。
県庁所在地の取得 --------------------
県庁所在地の取得はこうなる。県庁所在地はXML上、capital としている。
結果は
札幌
青森
鹿児島
那覇
となる。
県名も県庁所在地も関係なく取得 -------------
県名も県庁所在地も関係あるか!と言う場合はこういうこともできる。要するに、/records/prefectural/以下のものを順次見つけられればよいってことである。
結果は
北海道
札幌
青森
青森
鹿児島
鹿児島
沖縄
那覇
となる。
次回は、もう少しバリエーションを広げてみる。
お次は 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
結果は
北海道
札幌
青森
青森
鹿児島
鹿児島
沖縄
那覇
となる。
次回は、もう少しバリエーションを広げてみる。