いまさら聞けないXML〜VB.netでXMLを読む

  • 2011.08.22 Monday
  • 12:56
XMLの読み込みを頻繁に使うので、
自分がよく使うクラスを覚え書き


もっと効率のよい書き方があるかもしれません。
覚え書きなので、許してちょ


今回は、読み込みの方法


■データ例

[Test.xml]

<?xml version="1.0" encoding="utf-8"?>
<xRoot>
    <xData dID="都道府県">
        <xFuken kID="A1">
            <xCode>T1</xCode>
            <xName>東京</xName>
        </xFuken>
        <xFuken kID="A2">
            <xCode>T2</xCode>
            <xName>大阪</xName>
        </xFuken>
        <xFuken kID="A3">
            <xCode>T3</xCode>
            <xName>福岡</xName>
        </xFuken>
    </xData>
</xRoot>

いまさら聞けないXML〜VB.netでXMLを書き出すで書き出し方法を覚え書きしています。



■ソース例

Dim xDocument As XmlDocument = New XmlDocument
Dim xRoot As XmlElement
Dim xDataList As XmlNodeList
Dim xFukenList As XmlNodeList
Dim xNameList As XmlNodeList

Call xDocument.Load("test.xml") 'XMLファイルをロード

xRoot = xDocument.DocumentElement 'XMLドキュメントからルート要素を取り出す

If xRoot IsNot Nothing Then
   Call MessageBox.Show(xRoot.Name)
End If


xDataList = xRoot.GetElementsByTagName("xData") 'ルート要素から親リストを取得する

Call MessageBox.Show(String.Format("データあり : {0}個", xDataList.Count))

For Each xElement As XmlElement In xDataList '親リストから親要素を取り出す

    xFukenList = xElement.GetElementsByTagName("xFuken") '親要素の中の子リストを取り出す

    Call MessageBox.Show(String.Format("府県あり : {0}個", xFukenList.Count))

    For Each xFuken As XmlElement In xFukenList '子リストから子要素を取り出す

        Call MessageBox.Show(xFuken.SelectSingleNode("@kID").Value) '子要素の属性を読み取る

        xNameList = xFuken.GetElementsByTagName("xName") '子要素から孫リストを取り出す

        Call MessageBox.Show(String.Format("府県名あり : {0}個", xNameList.Count))

        For Each xName As XmlElement In xNameList '孫リストから孫要素を取り出す

            Call MessageBox.Show(xName.FirstChild.Value) '孫要素の値を取得する。
'FirstChildを使っているが、複数ある場合はForループで取得していく

        Next xName

    Next xFuken

Next xElement


コードを見てもらうと分かるように、
ロードした後は、親→子→孫→・・・とリストと要素を繰り返して取り出して、
その中にある必要なデータを取り出していく感じになる。
(親→孫という感じでダイレクトに取得も可能、ただし、別の子要素に同じ要素の孫がある場合、すべて取得してしまうので、子要素毎に読み出した方が良い場合もある)


 要素内のデータを取り出すときは、”要素名”
 要素の属性を取り出すときは、”@属性名” (半角@がないとエラーが出てしまう)

で取得できる。

これさえ分かれば、無理矢理ではあるけれどもXMLを読めるようにはなる
(応用すればiniファイルのようなXMLファイルも作れる)


上のソースはデータに要素がないとエラーを起こすこともあるので、

If xDataList IsNot Nothing Then とか、
If xName.FirstChild.Value IsNot Nothing Then とか

など細かいチューニングは必要。
その辺はやってみていくうちに分かってきます。



■参考
HIRO's.NET
http://hiros-dot.net/VBNET2005/XMLMenu.htm



関連投稿

いまさら聞けないXML〜VB.netでXMLをシリアライズして保存してみる
いまさら聞けないXML〜VB.netでXMLをデシリアライズしてXMLを読む
いまさら聞けないXML〜VB.netでXMLを書き出す


いまさらJSONしてみる〜VB2008でJSON形式を使う
いまさらJSONしてみる〜クラスや構造体をJSONしてみる
いまさらJSONしてみる〜配列を作ってみる。
いまさらJSONしてみる〜難読化とクラスのデシリアライズ
オブジェクト型をどうにかキャストしてみる〜objectな配列を取り出す

コメント
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2012 >>

■東京電力 電力需要■

よく使う、検索される投稿

アマゾン

楽天

その他

tenki.jpフォト

こよみ

フォクすけ
Firefox ブラウザ無料ダウンロード

ドラえもん

selected entries

categories

archives

recent comment

  • 探査小惑星ネイミングコンテスト
    rockecco (11/13)
  • 探査小惑星ネイミングコンテスト
    井本 (11/09)
  • やってしまったWindows8 DP〜上書きされたWindows7をよみがえらせる
    rockecco (11/08)
  • やってしまったWindows8 DP〜上書きされたWindows7をよみがえらせる
    pp3e (11/07)
  • やってしまったWindows8 DP〜上書きされたWindows7をよみがえらせる
    rockecco (11/06)
  • やってしまったWindows8 DP〜上書きされたWindows7をよみがえらせる
    rockecco (11/03)
  • やってしまったWindows8 DP〜上書きされたWindows7をよみがえらせる
    rockecco (11/02)
  • やってしまったWindows8 DP〜上書きされたWindows7をよみがえらせる
    pp3e (11/02)
  • フレッツのにねん割
    rockecco (10/21)
  • はじまりました〜ハッピープラレール
    rockecco (10/21)

recent trackback

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM