XML Save&Load

XML ファイルの作成と入力の基礎です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

XML FILE の説明

  1. XML(Extensible Markup Language)形式ファイルは世界標準となっている「簡単なデータの保存/交換」に便利な規格です。
    XML形式ファイルは、次のような特徴をもっています。
    1. テキスト形式で記述されるため、データ内容をテキストエディタで確認できる
    2. 独自のデータ構造を定義でき、タグを自由に規定できるので、汎用的なデータを扱うことが可能
    3. タグ単位でデータアクセスが可能なため、異なるシステム間でデータのやり取りを行う場合に適している
    4. WEB上で手軽にデータを扱うことができる
    XML を操作する専用のアプリケーション(ツール)なども開発されていて、簡単なデータベースにも応用されています。
    本格的は利用は、それらに任せておいて、ここでは C# で作成したアプリケーションに関する情報を XMLファイルとして保存する方法を紹介します。
  2. INI ファイルは、16bit CPU に対応した Windows 3.1 時代の Windows で使用されていた各種設定の保存用ファイルです。
    拡張子が「.ini」であることから、INIファイル(イニ・ファイル)と呼ばれていました。
    これは、テキスト・ファイルに格納されることから扱いやすく、さまざまな用途に使用されました。
    しかし、単純な構造しか持てず、また大量のデータ書き込みなどを行うと遅いことから、32bit時代の Windows ではレジストリにその役割を取って代わられました。
    現在では、レジストリも過去のものになりつつあり、アプリケーションに関する情報は XMLファイルとして保存することが推奨されています。
    C# にも XML を扱う専用の機能が実装されていて、簡単に作成や入力を行うことが出来ます。

XML ファイルの作成

  1. コンソールモードで XML FILE(@"C:\test\sample.xml")を作成するソースコードです。
    /*********************************/
    /*★ XML Save Test     前田 稔 ★*/
    /*********************************/
    //XMLファイルに保存するオブジェクトのためのクラス
    public class SampleClass
    {
        public int Number;
        public string Message;
    }
    
    class MainClass
    {
        public static void Main()
        {
            //保存先のファイル名
            string fileName = @"C:\test\sample.xml";
    
            //保存するクラス(SampleClass)のインスタンスを作成
            SampleClass obj = new SampleClass();
            obj.Message = "テストです。";
            obj.Number = 123;
    
            //XmlSerializerオブジェクトを作成
            //オブジェクトの型を指定する
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(SampleClass));
            //書き込むファイルを開く
            System.IO.FileStream fs = new System.IO.FileStream(
                fileName, System.IO.FileMode.Create);
            //シリアル化し、XMLファイルに保存する
            serializer.Serialize(fs, obj);
            //ファイルを閉じる
            fs.Close();
        }
    }
    
  2. 作成された XML FILE(@"C:\test\sample.xml")の内容です。
    <?xml version="1.0"?>
    <SampleClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Number>123</Number>
      <Message>テストです。</Message>
    </SampleClass>
    
  3. アプリケーションの情報は、構造体(class SampleClass)で定義して、XML FILE に記録します。
        public class SampleClass
        {   public int Number;
            public string Message;
        }
    
        SampleClass obj = new SampleClass();
        obj.Message = "テストです。";
        obj.Number = 123;
        
  4. 構造体はシリアライズされて、ファイルに転送されます。
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(SampleClass));
            System.IO.FileStream fs = new System.IO.FileStream(
                fileName, System.IO.FileMode.Create);
            serializer.Serialize(fs, obj);
        

XML ファイルの入力

  1. XML FILE(@"C:\test\sample.xml")を入力して、構造体(class SampleClass)を復元するソースコードです。
    /*********************************/
    /*★ XML Load Test     前田 稔 ★*/
    /*********************************/
    //XMLファイルに保存するオブジェクトのためのクラス
    using System;
    
    public class SampleClass
    {
        public int Number;
        public string Message;
    }
    
    class MainClass
    {
        public static void Main()
        {
            //保存元のファイル名
            string fileName = @"C:\test\sample.xml";
    
            //XmlSerializerオブジェクトを作成
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(SampleClass));
            //読み込むファイルを開く
            System.IO.FileStream fs = new System.IO.FileStream(
                fileName, System.IO.FileMode.Open);
            //XMLファイルから読み込み、逆シリアル化する
            SampleClass obj = (SampleClass) serializer.Deserialize(fs);
            //ファイルを閉じる
            fs.Close();
    
            Console.WriteLine(obj.Number + " : " + obj.Message);
        }
    }
    
  2. XML FILE に保存した構造体(class SampleClass)を復元します。
    XML FILE から読み込むときは、逆シリアル化します。
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(SampleClass));
            System.IO.FileStream fs = new System.IO.FileStream(
                fileName, System.IO.FileMode.Open);
            SampleClass obj = (SampleClass) serializer.Deserialize(fs);
        
  3. 構造体が復元されたことを確かめるために、印字してみました。
            Console.WriteLine(obj.Number + " : " + obj.Message);
        

日本語を使う

  1. ファイル作成とファイル入力の、保存する構造体(class SampleClass)を次のように定義して下さい。
    sample.xml のタグが日本語になります。
    //XMLファイルに保存するオブジェクトのためのクラス
    [System.Xml.Serialization.XmlRoot("サンプル")]
    public class SampleClass
    {
        [System.Xml.Serialization.XmlElement("数字")]
        public int Number;
        [System.Xml.Serialization.XmlElement("文字列")]
        public string Message;
    }
    
  2. 作成された XML FILE(@"C:\test\sample.xml")の内容です。
    <?xml version="1.0"?>
    <サンプル xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <数字>123</数字>
      <文字列>テストです。</文字列>
    </サンプル>
    
  3. C/C++ でも同様のプログラムを作成しています。
    XML Save&Load を参照して下さい。
    アプリの例は Text Editor を参照して下さい、
    空のプロジェクトから作成した場合、System.Xml.dll の追加が必要かも知れません。
    ソリューション・エクスプローラーで「参照設定」を右クリックして、 「参照の追加」から System.Xml を追加して下さい。

超初心者のプログラム入門(C# Frame Work)