第 3 回:Visual C# による XML 入門~ Visual C# による .NET Framework プログラミング入門 ~3.1 はじめに2000 年 6 月に Microsoft 社から 「Microsoft .NET」 が発表されました。「Microsoft .NET」 は、Windows などの OS だけでなく、Microsoft が持つパッケージソフトやアプリケーションからインターネットサービスに至るまでを統合する環境です。.NET 構想の基盤のデータ形式には、XML が利用されています。Visual C# は、XML を利用した Web アプリケーションを開発するための機能を豊富に提供しています。Visual C# は、次世代 Web アプリケーションの開発において、高い開発効率とハイパフォーマンスを実現します。そこで、本章の前半では、.NET 構想の基盤であり、Visual C# による次世代 Web アプリケーション開発の基盤となる XML の概念を解説すると同時に Visual Studio .NET と XML の関係について解説します。また、後半では、簡単な XML 文書の作成方法と Visual C# による XML 文書の操作方法について紹介します。
3.2 XML の概要2.3.1 XML とはXML (eXtensible Markup Language) とは、SGML (Standard Generalized Markup Language) と HTML (Hyper Text Markup Language) の特徴を合わせ持つ言語です。SGML は、文書の論理や意味構造を定義し、異なるアプリケーション間で共有する文書の記述ができる特徴を持っています。また、HTML は、Web 上で手軽に使用できる特徴を持っています。XML は、それらの特徴を受け継いでいるため、Web 上において交換可能なデータ形式として非常に注目されています。XML は、電子商取引や医療分野など幅広い分野で利用されています。XML のイメージを図 1 に示します。 .gif)
図1 XML のイメージ 3.2.2 XML の特徴と利点XML には、大きく 3 つの特徴があります。まず、1 つ目の特徴は、独自に文書構造を定義できることです。2 つ目の特徴は、タグが固定的であった HTML と異なり、タグを独自に定義できることです。3 つ目の特徴は、Web 上で手軽に利用できることです。これらの 3 つの特徴から XML には、次のような利点が挙げられます。まず、XML は、機種や OS、ネットワーク等プラットフォームに依存しないデータ形式であるため、データの交換性に優れています。次に、文書の論理や意味構造を定義し、タグや属性情報を使用するため、データの検索や抽出などに優れています。最後に、Web を介して、どこからでもデータを利用できるため、データの伝達性に優れています。XML の利点を図 2に示します。 .gif)
図 2 XML の利点 3.2.3 XML の活用例第 3.2.1 項でも述べたとおり、XML は、Web 上で交換可能なデータ形式であるため、電子商取引や医療分野などを始めとする幅広い分野において活用されています。例えば、電子商取引では、商品情報や顧客情報などに XML が利用されています。医療分野では、電子カルテの医療データを異なる医療機関間や電子カルテシステム間において、医療データを正しく交換・閲覧を行うために XML が利用されています。また、XML は、普段私たちが何気なく使用しているアプリケーションにも利用されています。その代表例としては、Microsoft 社の 「Microsoft Office」 が挙げられます。XML が導入されたことにより、「Word」 や 「Excel」 などの異なるアプリケーション間での文書の共有がスムーズになりました。XML の活用例のイメージを図 3 に示します。 .gif) 電子商取引での活用例 医療分野でのXML活用例
図 3 XML の活用のイメージ 3.3 Visual C# .NET と XML の関係3.3.1 XML と Web アプリケーションXML は、文書の意味構造や論理構造を記述するために適した言語であり、異なるアプリケーション間でのデータの共有を可能とすることから様々な場面で活用されています。例えば、Web アプリケーション間では、データ交換の形式を XML 文書にすることにより、情報の共有や再利用を図ることができます。また、データの共有により、他の Web サービスと組み合わせることが可能になり、よりよい Web サービスを提供することができます。XML と Web アプリケーションの関係を図 4 に示します。 .gif)
図 4 XML と Web アプリケーションの関係 3.3.2 XML DOM についてXML DOM (Document Object Model) とは、XML を操作するためのインタフェースです。XML DOM は、XML 文書を扱いやすい形にして、効率的なデータアクセスを可能にします。XML DOM は、XML 文書を読み込むことにより、文書を構成している要素や属性、テキストデータなどをツリー構造としてメモリ上に展開します。Visual C# には、XML DOM を利用するための便利なクラスが用意されています。本章では、XML DOM の利用方法について解説します。XML DOM の利用の概念を図 5 に示します。 .gif)
図 5 XML DOM の利用の概念 3.3.3 ASP.NET についてASP.NET とは、Visual Studio .NET が提供する Web アプリケーションや XML Web サービスを効率良く開発・運用・実行するための環境です。 ASP.NET は、従来の ASP (Active Sever Page) と比較し、はるかに利用しやすいプログラミングモデルを提供しています。また、ASP.NET を利用したWebアプリケーションの作成には、Visual C# .NET や Visual Basic .NET などの普段私たちがよく利用しているプログラミング言語を使用できます。ASP.NETの利用により、今まで私たちの頭を悩ませていたサーバサイドの概念などをほとんど気にせずデスクトップアプリケーションのように Web アプリケーションの開発ができるようになりました。ASP.NET を使用した Web アプリケーションの作成は、本連載の第 4 章で詳しく解説します。 3.4 簡単な XML 文書の作成3.4.1 XML 文書の記述方法XML 文書は、基本的に XML 宣言、DTD (Document Type Definition)、XML インスタンスの 3 つの部分で構成されます。XML 宣言では、この文書が XML 文書であることを宣言します。DTD では、XML 文書内に使用する要素や文書構造を定義します。XML インスタンスでは、DTD で定義された文書構造に従った内容を記述します。 3.4.2 サンプル XML 文書の作成本項では、簡単な XML 文書を作成します。サンプル XML 文書は、XML 宣言、DTD、XML インスタンスの順に作成します。 (1) XML 宣言XML 宣言では、XML 文書であることを明示するために、XML のバージョン、文字コード、Standalone 文書宣言を指定します。文字コードでは、XML 文書で使用する文字の文字符号化方式を指定します。Standalone 文書宣言では、XML 文書の外部 DTD 参照の有無を指定します。XML 宣言の構文を次に示します。 | <?xml バージョン 文字コード Standalone文書宣言 ?> |
本章では、XML 宣言を次のように記述します。 <?xml version="1.0" encoding="Shift_JIS"?> (2) DTDDTD とは、XML の本体であるXML インスタンスの構造を明確化するものです。DTD では、XML インスタンスで使用するタグを定義し、XML インスタンスがどのような構造であるのかを定義します。つまり、DTD とは、XML インスタンスを作成する上での設計図のようなものと言えます。本サンプルでは、DTD を次のように記述します。 <!DOCTYPE 住所録 [
<!ELEMENT 住所録 (名前,住所)>
<!ELEMENT 名前 (姓,名)>
<!ELEMENT 姓 (#PCDATA)>
<!ELEMENT 名 (#PCDATA)>
<!ELEMENT 住所 (都道府県,市町村)>
<!ELEMENT 都道府県 (#PCDATA)>
<!ELEMENT 市町村 (#PCDATA)>
]> XML インスタンスの構成図を図 6 に示します。 .gif)
図 6 XML インスタンスの構成図 (3) XML インスタンスXML インスタンスとは、XML 文書の本体です。XML インスタンスは、XML の文法にしたがって記述しなければいけません。XML インスタンスは、<住所> ~ </住所>のように開始タグと終了タグで文字列を挟んで記述します。この開始タグと終了タグで挟まれたひとかたまりのデータを 「要素」 と呼びます。要素は、XML 文書を作成する最小の単位です。また、要素は、その要素自体の中に別の要素を含むことができます。XML インスタンスの記述例を以下に示します。 <住所録>
<名前>
<姓>山田</姓>
<名>太郎</名>
</名前>
<住所>
<都道府県>大阪府</都道府県>
<市町村>大阪市</市町村>
</住所>
</住所録> 以上で、サンプル XML ファイルの作成は終了です。作成した XML 宣言、DTD、XML インスタンスを一つのテキストファイルとして保存します。本章では、ファイル名を 「sample.xml」 とします。 3.4.3 サンプル XML 文書の表示作成したサンプル XML 文書を表示するには、Internet Explorerを利用します。まず、Internet Explorer を起動します。次に、Internet Explorer のメニューから【ファイル】→【開く】を選択し、先ほど作成した 「sample.xml」 ファイルを開きます。最後に、作成した XML 文書が正しく記述されていると Internet Explorer に 「sample.xml」 ファイルが表示されます。sample.xml の表示画面を図 7 に示します。 .gif)
図 7 サンプル XML 文書の表示結果 3.5 VC# による XML 文書の操作3.5.1 XML 名前空間の利用.NETのクラスライブラリには、XML ファイルを操作するためのクラスが用意されています。クラスライブラリに用意されたクラスを利用することにより、簡単に XML ファイルを操作することができます。 これらのクラスを利用するには、XML 名前空間を参照する必要があります。XML 名前空間とは、XML ファイルを操作するためのクラス群のことです。XML 名前空間には、XML DOM を利用するためのクラスが用意されています。XML 名前空間を参照するための構文を次に示します。 3.5.2 XML 文書の読み込みXML 文書の読み込みには、XMLDocument クラスを利用します。XMLDocument クラスのインスタンスを生成する構文を次に示します。 | XmlDocument インスタンス名 = new XmlDocument(); |
XML 文書を読み込むには、XMLDocument クラスに用意されたLoad メソッドを使用します。Load メソッドの構文を次に示します。 | XMLDocumentインスタンス名.Load(ファイル名); |
3.5.3 XML 文書の保存XML 文書の保存には、XML 文書の読み込みと同様、XMLDocument クラスを利用します。インスタンスの生成方法は、 第 3.5.2 項を参照してください。XML 文書を保存するには、XMLDocument クラスに用意された Save メソッドを使用します。Save メソッドの構文を次に示します。 | XMLDocumentインスタンス名.Save(ファイル名); |
3.5.4 ノードの追加ノードとは、XML 文書の単位である属性や要素などのオブジェクトです。XML DOM には、XML 文書にノードの追加するためのメソッドが用意されています。本プログラムで使用するクラスは、XML 文書全体を管理する XMLDocument クラスと要素を操作する XMLElement クラスです。また、文書の中で要素を作成するには、XMLDocument クラスの CreateElement メソッドを使用します。ノードを追加するには、XMLNode クラスを利用します。XMLNode クラスのインスタンスを生成する構文を次に示します。 | XmlNode インスタンス名 = XMLDocumentインスタンス名.DocumentElement; |
XML 文書にノードを追加するには、XMLNode クラスの AppendChild メソッドやInsertAfter メソッド、InsertBefore メソッド、PrependChiled メソッドを使用します。AppendChild メソッドは、指定したノードをこのノードの子のリストの末尾にノードを追加します。InsertAfter メソッドは、指定したノードを指定した参照ノードの直後に挿入します。InsertBefore メソッドは、指定したノードを指定した参照ノードの直前に挿入します。PrependChiled メソッドは、指定したノードをこのノードの子のリストの先頭に追加します。また、追加するノードは、XMLDocument クラスの CreateElement メソッドで作成します。これらのメソッドの構文を次に示します。 XmlElement インスタンス名 = XMLDocumentインスタンス名.CreateElement("");
XMLNodeインスタンス名.AppendChild(XMLElementインスタンス名);
XMLNodeインスタンス名.InsertAfter(XMLElementインスタンス名, 指定ノード名);
XMLNodeインスタンス名.InsertBefore(XMLElementインスタンス名, 指定ノード名);
XMLNodeインスタンス名.PrependChild(XMLElementインスタンス名);本節では、AppendChild メソッドを利用したノードの追加プログラムを作成します。XMLDocument クラスのインスタンス名を 「doc」、XMLElement クラスのインスタンス名を 「elem」、XMLNode クラスのインスタンス名を 「root」とします。ノードを追加するためのコードを次に示します。 private void button1_Click(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument(); // XMLDocument クラスのインスタンス生成
openFileDialog1.ShowDialog(); // 【ファイルを保存】ダイアログの表示
doc.Load(openFileDialog1.FileName); // 【ファイルを開く】ダイアログで指定した
XML ファイルの読み込み
XmlNode root = doc.DocumentElement; // XMLNode クラスのインスタンス生成
XmlElement elem = doc.CreateElement("追加したノード"); // 追加するノードの作成
elem.InnerText="追加した内容"; //追加したノードの内容
root.AppendChild(elem); // ノードの追加
saveFileDialog1.ShowDialog(); // 【ファイルを保存】ダイアログの表示
doc.Save(saveFileDialog1.FileName); // 【ファイルを保存】ダイアログで指定した
ファイル名でファイルの保存
}本プログラムを実行し、作成した XML ファイルの表示結果を図 8 に示します。本サンプルプログラムで読み込む XML 文書は、第 3.4 節で作成した sample.xml です。 .gif)
図 8 ノード追加プログラム実行結果 3.5.5 ノードの削除 ノードを削除するには、ノードの追加と同様、XMLDocument クラスと XMLElement クラス、XMLNode クラスを利用します。インスタンスの生成方法は、 第 3.5.4 項を参照してください。XML 文書からノードを削除するには、XMLNode クラスの RemoveChild メソッド、もしくは RemoveAll メソッドを使用します。RemoveChild メソッドは、指定した子ノードを削除します。RemoveAll メソッドは、現在のノードを全て削除します。これらのメソッドの構文を次に示します。 XmlElement インスタンス名 = XMLDocumentインスタンス名.CreateElement("");
XMLNodeインスタンス名.RemoveChild(XMLNodeインスタンス名, 指定ノード名); |
本節では、RemoveChild メソッドを利用したノードの削除プログラムを作成します。XMLDocument クラスのインスタンス名を「doc」、XMLNode クラスのインスタンス名を「root」とします。ノードを削除するためのコードを次に示します。 private void button1_Click(object sender, System.EventArgs e)
{
XmlDocument doc = new XmlDocument(); // XMLDocument クラスのインスタンス生成
openFileDialog1.ShowDialog(); // 【ファイルを保存】ダイアログの表示
doc.Load(openFileDialog1.FileName); // 【ファイルを開く】ダイアログで指定した
XML ファイルの読み込み
XmlNode root = doc.DocumentElement; // XMLNode クラスのインスタンス生成
root.RemoveChild(root.FirstChild); // ノードの削除
saveFileDialog1.ShowDialog(); // 【ファイルを保存】ダイアログの表示
doc.Save(saveFileDialog1.FileName); // 【ファイルを保存】ダイアログで指定した
ファイル名でファイルの保存
}本プログラムを実行し、作成した XML ファイルの表示結果を図 9 に示します。本サンプルプログラムで読み込む XML 文書は、第 3.4 節で作成した sample.xml です。 .gif)
図 9 ノード削除プログラム実行結果 3.6 まとめ本章では、XML の概念から Visual C# による XML 文書の簡単な操作まで解説しました。本章で解説した以外にも XML 文書を操作するための便利なクラスが Visual C# には用意されています。XML 文書の操作技術を利用することにより、XML 文書の作成・編集・保存を容易に行うことができます。 今日、XML は、様々な研究に利用されています。例えば、医療分野において、遺伝子情報の文書化を行う研究に利用されています。遺伝子情報を XML を用いて表現することにより、膨大な遺伝子情報を複数の異なるシステム間で再利用ができるため、コンピュータによる解析能力を高めることができます。また、データベースが共通化されることで、データベースの違いを意識せずに利用できるようになりました。そのため、データ処理プログラムの開発負荷が軽減できます。また、医療分野において XML をベースとした電子カルテの交換フォーマットとして MML (Medical Markup Language) があります。MML を利用することにより、異なるシステム間での診療データ交換できるため、快適な医療サービスが実現します。 XML は、GIS (Graphical Information System) の研究にも利用されています。GIS とは、電子地図上に情報を付加し、別の電子地図データを利用することで様々な比較や分析を行うシステムです。しかし、GIS のデータは、それぞれ独自のデータ形式で蓄えているため、異なる地図間や異なる GIS エンジン間では、これらのデータを共有できない問題点があります。そこで、XML に準拠した G-XML や GML と呼ばれるプロトコルを開発し、他の GIS コンテンツや電子地図データの再利用を可能にしました。 現在、このような膨大なデータを利用する研究には、XML を使用するのが主流となっています。XML を利用した研究を行う場合には、本章で学習した XML 文書の操作技術が重要となります。
著者紹介田中 成典 (たなか しげのり)| 1986年 | 関西大学工学部土木工学科卒業 | | 1988年 | 関西大学大学院工学研究科 土木工学専攻博士課程前期課程修了 | | 1996年 | 博士 (工学) 授与,関西大学 | | 1997年 | 関西大学総合情報学部助教授 (現在に至る) | | 主な著書: | やさしいCのはじめかた,オーム社,1993年 | | | 建設技術者のための知識情報処理の実践,関西大学出版部,1999年 | | | DirectX8,工学社,2001年 | | | ステップアップXML,工学社,2002年 | | | Linuxアプリケーション入門,森北出版,2002年 ほか |
中山 浩太郎 (なかやま こうたろう)| 2001年3月 | 関西大学総合情報学部卒業 | | 2001年4月 | 関西大学大学院総合情報学研究科入学 (現在に至る) | | 2002年4月 | 同志社女子大学非常勤講師 (現在に至る) | | 主な著書: | Web工房シリーズ Perlの達人,森北出版,1999年 | | | DirectX8,工学社,2001年 | | | Linuxアプリケーション入門,森北出版,2002年 ほか |
石井 健一 (いしい けんいち)| 1999年4月 | 関西大学総合情報学部総合情報学科入学 (現在に至る) | | 主な著書: | ステップアップXML活用法,工学社,2002年 |
野中 一希 (のなか かずき)| 1999年4月 | 関西大学総合情報学部総合情報学科入学 (現在に至る) | | 2002年1月 | 株式会社関西総合情報研究所入社 (現在に至る) |
中村 健二 (なかむら けんじ)| 2000年4月 | 関西大学総合情報学部総合情報学科入学 (現在に至る) | | 2002年4月 | 株式会社関西総合情報研究所入社 (現在に至る) |
ページのトップへ
|