連載

.NETで簡単XML

第3回 XML文書を読み書きするプログラムの作成

株式会社ピーデー 川俣 晶
2003/04/08

Page1 Page2 Page3 Page4 Page5


Back Issue
1
XML超入門
2 プログラムでXML文書を作成する

XML文書を読み込む

 第2回 プログラムでXML文書を作成するでは、XML文書を書き出すプログラムを作成した。そこで、今回は読み込みに挑戦してみよう。XML文書を読み込む方法はいくつかあるが、今回はXmlReaderを使用する。

 XML文書を読み込むプログラムは、書き出すプログラムに比べると作るのが難しい。なぜなら、書き出すときには項目の並び順をプログラム側で強制できるのに対して、既存のXML文書を読み込む際には、どんな項目がどんな順番で並んでいるのか、あらゆる可能性を考えなければならないからだ。これを回避するためには、スキーマを使って、並び順の妥当性を確認するという方法もあるが、ここではスキーマを使わないという前提で話を進めよう。

 さて、XML文書を出力するために前回紹介したXmlTextWriterクラスがあったのと同じように、読み込み用のXmlTextReaderクラスも存在する。このクラスは、ファイル、ストリーム、テキストなどからXML文書を入力する機能を持つ。処理する順番は、XmlTextWriterクラスと同様に、前方から後方に向かって一直線(シーケンシャル)である。処理の流れを変えることはできない。このクラスは、抽象クラスのXmlReaderクラスに、それらの対象からの入力機能を実装したものである。もし、何か別の対象から入力したい場合は、XmlReaderクラスを継承して入力機能を実装すればよいことになる。それは応用技ということで話をXmlTextReaderクラスに戻そう。

 XmlTextReaderクラスには、XML文書に記録されているさまざまな項目、要素や属性などを読み込むメソッドが用意されている。しかし、それだけで十分というわけではなく、種類を問わず次の項目を読み込むReadメソッドが存在している。Readメソッドで次の項目を読み込んでから、その項目が何かを判定して、処理すべき内容を決定するプログラミングを行うことが多い。

 さて、いろいろな種類の項目が読み込まれて分類される様子を確認するために、サンプル・プログラムを用意した。条件を変えて何度も繰り返し試すために、以下に示すようなGUIのインターフェイスを用意しよう。

 まず、Windowsアプリケーションのフォーム上に、マルチラインのTextBoxコントロール(MultilineプロパティをTrueに設定)を2つと、Buttonコントロールを1つ貼り付けよう。Labelコントロールなどは好みに応じて適当に付ければよい。各コントロールには次のような名前を設定する。

上のTextBoxコントロール:textBoxSource
下のTextBoxコントロール:textBoxResult
Buttonコントロール:buttonDump

 Visual Studio .NETでの配置は、次のような感じである。

GUIインターフェイスのデザイン例
このサンプル・プログラムは、さまざまなXML文書を読み込んで、その処理結果を確認するのに利用する。

 フォームができたら、コードの先頭部分に、以下のようにImportsステートメント(C#ではusingディレクティブ)を追加する。

Imports System.IO
Imports System.Xml
VB.NET版のサンプルに必要なImportsステートメント
C#版のサンプルに必要なusingディレクティブ

 そして、いま配置したButtonコントロールをダブルクリックし、ボタンのClickイベントとして以下のようなコード書き込む。

  Private Sub buttonDump_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonDump.Click
    Dim writer As StringWriter = New StringWriter()
    Try
      Dim reader As XmlTextReader = New XmlTextReader(New StringReader(textBoxSource.Text))
      Try
        While reader.Read()
          writer.WriteLine("ノードを発見: {0}", reader.NodeType.ToString())

          Select Case reader.NodeType
            Case XmlNodeType.Element
              writer.WriteLine("reader.Name={0}", reader.Name)

              If reader.MoveToFirstAttribute() Then
                Do
                  writer.WriteLine("属性を発見 {0}={1}", reader.Name, reader.Value)
                Loop Until (Not reader.MoveToNextAttribute())
              End If
            Case XmlNodeType.Text
              writer.WriteLine("reader.Value={0}", reader.Value)
            Case XmlNodeType.EndElement
              writer.WriteLine("reader.Name={0}", reader.Name)
          End Select
        End While
      Catch ex As XmlException
        writer.WriteLine(ex.ToString())
      Finally
        reader.Close()
      End Try
    Finally
      writer.Close()
    End Try
    textBoxResult.Text = writer.ToString()
  End Sub
ボタンのClickイベントに記述するコード(VB.NET版)
ボタンのClickイベントに記述するコード(C#版)


 INDEX
  .NETで簡単XML
  第3回 XML文書を読み書きするプログラムの作成
  1.XML文書を読み込む
    2.XML文書を読み込むサンプル・プログラム
    3.文書の妥当性を検証するXmlValidatingReaderクラス
    4.XML文書を読み書きするサンプル
    5.XML文書を読み書きするサンプルの解説
 
インデックス・ページヘ  「連載 :.NETで簡単XML」

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH