データ群をXML入出力(DataSet)

ファイル/フォルダ

xmlはExtensible Markup Languageの略で、タグを利用してデータとして表現します。

例えば

<?xml version="1.0" encoding="Shift_JIS" ?>
<User>
    <ID>1</ID>
    <Name>Charlotte</Name>
    <Age>20</Age>
    <Gender>Female</Gender>
</User>

この場合Userは、IDとNameとAgeとGenderという情報を持っているということになります。

サンプルデータ

今回、データ出力で利用するサンプルデータを作成しました。

ユーザークラス

private class UserClass
{
    public enum ENM_GENDER
    {
        None = 0,
        Male,
        Female
    }

    public int ID { get; set; } = 0;                            //ID
    public string Name { get; set; } = "";                      //名前
    public string Yomigana { get; set; } = "";                  //読み仮名
    public int Age { get; set; } = 0;                           //年齢
    public ENM_GENDER Gender { get; set; } = ENM_GENDER.None;   //性別
}

リスト作成

private List<UserClass> _user_list = new List<UserClass>();

データ設定

_user_list.Add(new UserClass() { ID = 1, Name = "井上 健一", Yomigana = "いのうえ けんいち", Age = 72, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 2, Name = "高橋 健司", Yomigana = "たかはし けんじ", Age = 76, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 3, Name = "杉山 直樹", Yomigana = "すぎやま なおき", Age = 25, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 4, Name = "中村 弘", Yomigana = "なかむら ひろし", Age = 58, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 5, Name = "山下 浩一", Yomigana = "やました こういち", Age = 33, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 6, Name = "石井 裕介", Yomigana = "いしい ゆうすけ", Age = 11, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 7, Name = "内田 豊", Yomigana = "うちだ ゆたか", Age = 69, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 8, Name = "松田 正樹", Yomigana = "まつだ まさき", Age = 12, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 9, Name = "橋本 剛", Yomigana = "はしもと たけし", Age = 65, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 10, Name = "鈴木 研二", Yomigana = "すずき けんじ", Age = 18, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 11, Name = "伊藤 佑太", Yomigana = "いとう ゆうた", Age = 26, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 12, Name = "高橋 隆文", Yomigana = "たかはし たかふみ", Age = 45, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 13, Name = "山本 覚", Yomigana = "やまもと さとる", Age = 55, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 14, Name = "西 健一", Yomigana = "にし けんいち", Age = 62, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 15, Name = "鈴木 和弥", Yomigana = "すずき かずや", Age = 49, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 16, Name = "中山 修平", Yomigana = "なかやま しゅうへい", Age = 54, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 17, Name = "横田 一郎", Yomigana = "よこた いちろう", Age = 42, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 18, Name = "熊谷 光", Yomigana = "くまがい ひかる", Age = 33, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 19, Name = "山崎 拓磨", Yomigana = "やまざき たくま", Age = 46, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 20, Name = "小林 啓治", Yomigana = "こばやし けいじ", Age = 9, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 21, Name = "高橋 洋次郎", Yomigana = "たかはし ようじろう", Age = 73, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 22, Name = "末吉 豊", Yomigana = "すえよし ゆたか", Age = 8, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 23, Name = "北川 歩", Yomigana = "きたがわ あゆむ", Age = 77, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 24, Name = "吉田 伸宏", Yomigana = "よしだ のぶひろ", Age = 62, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 25, Name = "野村 伸彦", Yomigana = "のむら のぶひこ", Age = 43, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 26, Name = "岡田 新平", Yomigana = "おかだ しんぺい", Age = 39, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 27, Name = "宇野 隆司", Yomigana = "うの たかし", Age = 19, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 28, Name = "酒井 明人", Yomigana = "さかい あきひと", Age = 14, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 29, Name = "石田 敏朗", Yomigana = "いしだ としろう", Age = 61, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 30, Name = "安田 穣", Yomigana = "やすだ みのる", Age = 66, Gender = UserClass.ENM_GENDER.Male });
_user_list.Add(new UserClass() { ID = 31, Name = "佐藤 朋子", Yomigana = "さとう ともこ", Age = 39, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 32, Name = "佐々木 香織", Yomigana = "ささき かおり", Age = 25, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 33, Name = "佐藤 千佳", Yomigana = "さとう ちか", Age = 12, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 34, Name = "中山 香織", Yomigana = "なかやま かおり", Age = 15, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 35, Name = "木村 美和", Yomigana = "きむら みわ", Age = 15, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 36, Name = "山口 桃子", Yomigana = "やまぐち ももこ", Age = 20, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 37, Name = "中川 恵子", Yomigana = "なかがわ けいこ", Age = 17, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 38, Name = "清水 敦子", Yomigana = "しみず あつこ", Age = 69, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 39, Name = "小林 雅美", Yomigana = "こばやし まさみ", Age = 67, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 40, Name = "望月 智子", Yomigana = "もちづき ともこ", Age = 74, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 41, Name = "小池 直子", Yomigana = "こいけ なおこ", Age = 42, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 42, Name = "緒方 智子", Yomigana = "おがた ともこ", Age = 71, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 43, Name = "小松 早苗", Yomigana = "こまつ さなえ", Age = 44, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 44, Name = "白井 由香", Yomigana = "しらい ゆか", Age = 37, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 45, Name = "大山 美里", Yomigana = "おおやま みさと", Age = 48, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 46, Name = "今井 真紀子", Yomigana = "いまい まきこ", Age = 44, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 47, Name = "中尾 千晶", Yomigana = "なかお ちあき", Age = 50, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 48, Name = "佐藤 紗智子", Yomigana = "さとう さちこ", Age = 37, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 49, Name = "松本 雪乃", Yomigana = "まつもと ゆきの", Age = 27, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 50, Name = "大平 千尋", Yomigana = "おおひら ちひろ", Age = 53, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 51, Name = "金子 恵梨", Yomigana = "かねこ えり", Age = 75, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 52, Name = "今井 睦", Yomigana = "いまい むつみ", Age = 71, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 53, Name = "佐々木 真利子", Yomigana = "ささき まりこ", Age = 34, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 54, Name = "神戸 真由美", Yomigana = "かんべ まゆみ", Age = 42, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 55, Name = "小倉 和代", Yomigana = "おぐら かずよ", Age = 68, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 56, Name = "井上 静江", Yomigana = "いのうえ しずえ", Age = 11, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 57, Name = "大橋 香奈子", Yomigana = "おおはし かなこ", Age = 51, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 58, Name = "西野 千穂", Yomigana = "にしの ちほ", Age = 59, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 59, Name = "上野 麻理子", Yomigana = "うえの まりこ", Age = 15, Gender = UserClass.ENM_GENDER.Female });
_user_list.Add(new UserClass() { ID = 60, Name = "森本 夕子", Yomigana = "もりもと ゆうこ", Age = 23, Gender = UserClass.ENM_GENDER.Female });

都道府県クラス

private class PrefecturesClass
{
    public int ID { get; set; } = 0;                            //ID
    public string Name { get; set; } = "";                      //名前
    public int Population { get; set; } = 0;                    //人口
    public int Household { get; set; } = 0;                     //世帯数
    public double Area { get; set; } = 0;                       //面積
}

リスト作成

private List<PrefecturesClass> _prefectures_list = new List<PrefecturesClass>();

データ設定

_prefectures_list.Add(new PrefecturesClass() { ID = 1, Name = "北海道", Population = 5224614, Household = 2469063, Area = 83424.44 });
_prefectures_list.Add(new PrefecturesClass() { ID = 2, Name = "青森県", Population = 1237984, Household = 509649, Area = 9645.64 });
_prefectures_list.Add(new PrefecturesClass() { ID = 3, Name = "岩手県", Population = 1210534, Household = 490828, Area = 15275.01 });
_prefectures_list.Add(new PrefecturesClass() { ID = 4, Name = "宮城県", Population = 2301996, Household = 980549, Area = 7282.29 });
_prefectures_list.Add(new PrefecturesClass() { ID = 5, Name = "秋田県", Population = 959502, Household = 383531, Area = 11637.52 });
_prefectures_list.Add(new PrefecturesClass() { ID = 6, Name = "山形県", Population = 1068027, Household = 396792, Area = 9323.15 });
_prefectures_list.Add(new PrefecturesClass() { ID = 7, Name = "福島県", Population = 1833152, Household = 740089, Area = 13784.14 });
_prefectures_list.Add(new PrefecturesClass() { ID = 8, Name = "茨城県", Population = 2867009, Household = 1181598, Area = 6097.39 });
_prefectures_list.Add(new PrefecturesClass() { ID = 9, Name = "栃木県", Population = 1933146, Household = 795449, Area = 6408.09 });
_prefectures_list.Add(new PrefecturesClass() { ID = 10, Name = "群馬県", Population = 1939110, Household = 803215, Area = 6362.28 });
_prefectures_list.Add(new PrefecturesClass() { ID = 11, Name = "埼玉県", Population = 7344765, Household = 3157627, Area = 3797.75 });
_prefectures_list.Add(new PrefecturesClass() { ID = 12, Name = "千葉県", Population = 6284480, Household = 2767661, Area = 5157.57 });
_prefectures_list.Add(new PrefecturesClass() { ID = 13, Name = "東京都", Population = 14047594, Household = 7216650, Area = 2194.03 });
_prefectures_list.Add(new PrefecturesClass() { ID = 14, Name = "神奈川県", Population = 9237337, Household = 4210122, Area = 2416.11 });
_prefectures_list.Add(new PrefecturesClass() { ID = 15, Name = "新潟県", Population = 2201272, Household = 862796, Area = 12583.96 });
_prefectures_list.Add(new PrefecturesClass() { ID = 16, Name = "富山県", Population = 1034814, Household = 403007, Area = 4247.58 });
_prefectures_list.Add(new PrefecturesClass() { ID = 17, Name = "石川県", Population = 1132526, Household = 468835, Area = 4186.21 });
_prefectures_list.Add(new PrefecturesClass() { ID = 18, Name = "福井県", Population = 766863, Household = 290692, Area = 4190.52 });
_prefectures_list.Add(new PrefecturesClass() { ID = 19, Name = "山梨県", Population = 809974, Household = 338057, Area = 4465.27 });
_prefectures_list.Add(new PrefecturesClass() { ID = 20, Name = "長野県", Population = 2048011, Household = 829979, Area = 13561.56 });
_prefectures_list.Add(new PrefecturesClass() { ID = 21, Name = "岐阜県", Population = 1978742, Household = 779029, Area = 10621.29 });
_prefectures_list.Add(new PrefecturesClass() { ID = 22, Name = "静岡県", Population = 3633202, Household = 1480969, Area = 7777.35 });
_prefectures_list.Add(new PrefecturesClass() { ID = 23, Name = "愛知県", Population = 7542415, Household = 3233126, Area = 5173.07 });
_prefectures_list.Add(new PrefecturesClass() { ID = 24, Name = "三重県", Population = 1770254, Household = 741183, Area = 5774.49 });
_prefectures_list.Add(new PrefecturesClass() { ID = 25, Name = "滋賀県", Population = 1413610, Household = 570529, Area = 4017.38 });
_prefectures_list.Add(new PrefecturesClass() { ID = 26, Name = "京都府", Population = 2578087, Household = 1188903, Area = 4612.2 });
_prefectures_list.Add(new PrefecturesClass() { ID = 27, Name = "大阪府", Population = 8837685, Household = 4126995, Area = 1905.32 });
_prefectures_list.Add(new PrefecturesClass() { ID = 28, Name = "兵庫県", Population = 5465002, Household = 2399358, Area = 8401.02 });
_prefectures_list.Add(new PrefecturesClass() { ID = 29, Name = "奈良県", Population = 1324473, Household = 543908, Area = 3690.94 });
_prefectures_list.Add(new PrefecturesClass() { ID = 30, Name = "和歌山県", Population = 922584, Household = 393489, Area = 4724.65 });
_prefectures_list.Add(new PrefecturesClass() { ID = 31, Name = "鳥取県", Population = 553407, Household = 219069, Area = 3507.14 });
_prefectures_list.Add(new PrefecturesClass() { ID = 32, Name = "島根県", Population = 671126, Household = 268462, Area = 6707.89 });
_prefectures_list.Add(new PrefecturesClass() { ID = 33, Name = "岡山県", Population = 1888432, Household = 799611, Area = 7114.33 });
_prefectures_list.Add(new PrefecturesClass() { ID = 34, Name = "広島県", Population = 2799702, Household = 1241204, Area = 8479.65 });
_prefectures_list.Add(new PrefecturesClass() { ID = 35, Name = "山口県", Population = 1342059, Household = 597309, Area = 6112.54 });
_prefectures_list.Add(new PrefecturesClass() { ID = 36, Name = "徳島県", Population = 719559, Household = 307358, Area = 4146.75 });
_prefectures_list.Add(new PrefecturesClass() { ID = 37, Name = "香川県", Population = 950244, Household = 406062, Area = 1876.78 });
_prefectures_list.Add(new PrefecturesClass() { ID = 38, Name = "愛媛県", Population = 1334841, Household = 599941, Area = 5676.19 });
_prefectures_list.Add(new PrefecturesClass() { ID = 39, Name = "高知県", Population = 691527, Household = 314330, Area = 7103.63 });
_prefectures_list.Add(new PrefecturesClass() { ID = 40, Name = "福岡県", Population = 5135214, Household = 2318479, Area = 4986.51 });
_prefectures_list.Add(new PrefecturesClass() { ID = 41, Name = "佐賀県", Population = 811442, Household = 311173, Area = 2440.69 });
_prefectures_list.Add(new PrefecturesClass() { ID = 42, Name = "長崎県", Population = 1312317, Household = 556130, Area = 4130.98 });
_prefectures_list.Add(new PrefecturesClass() { ID = 43, Name = "熊本県", Population = 1738301, Household = 716740, Area = 7409.46 });
_prefectures_list.Add(new PrefecturesClass() { ID = 44, Name = "大分県", Population = 1123852, Household = 487679, Area = 6340.76 });
_prefectures_list.Add(new PrefecturesClass() { ID = 45, Name = "宮崎県", Population = 1069576, Household = 468575, Area = 7735.22 });
_prefectures_list.Add(new PrefecturesClass() { ID = 46, Name = "鹿児島県", Population = 1588256, Household = 725855, Area = 9187.06 });
_prefectures_list.Add(new PrefecturesClass() { ID = 47, Name = "沖縄県", Population = 1467480, Household = 613294, Area = 2282.59 });

DataSetを使って、XMLを書き込む

DataSetはWriteXmlというメソッドを持っています。これを利用します。
データ群を扱うのであればこれが楽だと思います。

//出力先を取得
string output_path = "";
using (SaveFileDialog dlg = new SaveFileDialog())
{
    dlg.Filter = @"XML(*.xml)|*.xml";

    if (dlg.ShowDialog() != DialogResult.OK)
    {
        //OK以外は処理を抜ける
        return;
    }

    output_path = dlg.FileName;
}

//*************************
//ユーザーのデータを作成
//************************

//XMLのトップタグの名称
const string XML_NAME_USER = "USER";

//テーブルを作成
DataTable user_table = new DataTable(XML_NAME_USER);

//列を作成
user_table.Columns.Add(nameof(UserClass.ID), typeof(int));
user_table.Columns.Add(nameof(UserClass.Name), typeof(string));
user_table.Columns.Add(nameof(UserClass.Yomigana), typeof(string));
user_table.Columns.Add(nameof(UserClass.Age), typeof(int));
user_table.Columns.Add(nameof(UserClass.Gender), typeof(UserClass.ENM_GENDER));

//データをDataTableに格納
foreach (UserClass user in _user_list)
{
    user_table.Rows.Add(user.ID, user.Name, user.Yomigana, user.Age, user.Gender);
}

//*************************
//都道府県のデータを作成
//************************

//XMLのトップタグの名称
const string XML_NAME_PREFECTURES = "PREFECTURES";

//テーブルを作成
DataTable prefectures_table = new DataTable(XML_NAME_PREFECTURES);

//列を作成
prefectures_table.Columns.Add(nameof(PrefecturesClass.ID), typeof(int));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Name), typeof(string));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Population), typeof(string));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Household), typeof(int));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Area), typeof(double));

//データをDataTableに格納
foreach (PrefecturesClass prefecture in _prefectures_list)
{
    prefectures_table.Rows.Add(prefecture.ID, prefecture.Name, prefecture.Population, prefecture.Household, prefecture.Area);
}

//DataSetを作成
const string XML_NAME_DATASET = "MYDATASET";
DataSet ds = new DataSet(XML_NAME_DATASET);

//DataTableを作成
ds.Tables.Add(user_table);
ds.Tables.Add(prefectures_table);

//XML出力
ds.WriteXml(output_path);

実行結果

以下のようなXMLが出力されました。

<?xml version="1.0" standalone="yes"?>
<MYDATASET>
  <USER>
    <ID>1</ID>
    <Name>井上 健一</Name>
    <Yomigana>いのうえ けんいち</Yomigana>
    <Age>72</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>2</ID>
    <Name>高橋 健司</Name>
    <Yomigana>たかはし けんじ</Yomigana>
    <Age>76</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>3</ID>
    <Name>杉山 直樹</Name>
    <Yomigana>すぎやま なおき</Yomigana>
    <Age>25</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>4</ID>
    <Name>中村 弘</Name>
    <Yomigana>なかむら ひろし</Yomigana>
    <Age>58</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>5</ID>
    <Name>山下 浩一</Name>
    <Yomigana>やました こういち</Yomigana>
    <Age>33</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>6</ID>
    <Name>石井 裕介</Name>
    <Yomigana>いしい ゆうすけ</Yomigana>
    <Age>11</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>7</ID>
    <Name>内田 豊</Name>
    <Yomigana>うちだ ゆたか</Yomigana>
    <Age>69</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>8</ID>
    <Name>松田 正樹</Name>
    <Yomigana>まつだ まさき</Yomigana>
    <Age>12</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>9</ID>
    <Name>橋本 剛</Name>
    <Yomigana>はしもと たけし</Yomigana>
    <Age>65</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>10</ID>
    <Name>鈴木 研二</Name>
    <Yomigana>すずき けんじ</Yomigana>
    <Age>18</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>11</ID>
    <Name>伊藤 佑太</Name>
    <Yomigana>いとう ゆうた</Yomigana>
    <Age>26</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>12</ID>
    <Name>高橋 隆文</Name>
    <Yomigana>たかはし たかふみ</Yomigana>
    <Age>45</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>13</ID>
    <Name>山本 覚</Name>
    <Yomigana>やまもと さとる</Yomigana>
    <Age>55</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>14</ID>
    <Name>西 健一</Name>
    <Yomigana>にし けんいち</Yomigana>
    <Age>62</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>15</ID>
    <Name>鈴木 和弥</Name>
    <Yomigana>すずき かずや</Yomigana>
    <Age>49</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>16</ID>
    <Name>中山 修平</Name>
    <Yomigana>なかやま しゅうへい</Yomigana>
    <Age>54</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>17</ID>
    <Name>横田 一郎</Name>
    <Yomigana>よこた いちろう</Yomigana>
    <Age>42</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>18</ID>
    <Name>熊谷 光</Name>
    <Yomigana>くまがい ひかる</Yomigana>
    <Age>33</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>19</ID>
    <Name>山崎 拓磨</Name>
    <Yomigana>やまざき たくま</Yomigana>
    <Age>46</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>20</ID>
    <Name>小林 啓治</Name>
    <Yomigana>こばやし けいじ</Yomigana>
    <Age>9</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>21</ID>
    <Name>高橋 洋次郎</Name>
    <Yomigana>たかはし ようじろう</Yomigana>
    <Age>73</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>22</ID>
    <Name>末吉 豊</Name>
    <Yomigana>すえよし ゆたか</Yomigana>
    <Age>8</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>23</ID>
    <Name>北川 歩</Name>
    <Yomigana>きたがわ あゆむ</Yomigana>
    <Age>77</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>24</ID>
    <Name>吉田 伸宏</Name>
    <Yomigana>よしだ のぶひろ</Yomigana>
    <Age>62</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>25</ID>
    <Name>野村 伸彦</Name>
    <Yomigana>のむら のぶひこ</Yomigana>
    <Age>43</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>26</ID>
    <Name>岡田 新平</Name>
    <Yomigana>おかだ しんぺい</Yomigana>
    <Age>39</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>27</ID>
    <Name>宇野 隆司</Name>
    <Yomigana>うの たかし</Yomigana>
    <Age>19</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>28</ID>
    <Name>酒井 明人</Name>
    <Yomigana>さかい あきひと</Yomigana>
    <Age>14</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>29</ID>
    <Name>石田 敏朗</Name>
    <Yomigana>いしだ としろう</Yomigana>
    <Age>61</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>30</ID>
    <Name>安田 穣</Name>
    <Yomigana>やすだ みのる</Yomigana>
    <Age>66</Age>
    <Gender>1</Gender>
  </USER>
  <USER>
    <ID>31</ID>
    <Name>佐藤 朋子</Name>
    <Yomigana>さとう ともこ</Yomigana>
    <Age>39</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>32</ID>
    <Name>佐々木 香織</Name>
    <Yomigana>ささき かおり</Yomigana>
    <Age>25</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>33</ID>
    <Name>佐藤 千佳</Name>
    <Yomigana>さとう ちか</Yomigana>
    <Age>12</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>34</ID>
    <Name>中山 香織</Name>
    <Yomigana>なかやま かおり</Yomigana>
    <Age>15</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>35</ID>
    <Name>木村 美和</Name>
    <Yomigana>きむら みわ</Yomigana>
    <Age>15</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>36</ID>
    <Name>山口 桃子</Name>
    <Yomigana>やまぐち ももこ</Yomigana>
    <Age>20</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>37</ID>
    <Name>中川 恵子</Name>
    <Yomigana>なかがわ けいこ</Yomigana>
    <Age>17</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>38</ID>
    <Name>清水 敦子</Name>
    <Yomigana>しみず あつこ</Yomigana>
    <Age>69</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>39</ID>
    <Name>小林 雅美</Name>
    <Yomigana>こばやし まさみ</Yomigana>
    <Age>67</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>40</ID>
    <Name>望月 智子</Name>
    <Yomigana>もちづき ともこ</Yomigana>
    <Age>74</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>41</ID>
    <Name>小池 直子</Name>
    <Yomigana>こいけ なおこ</Yomigana>
    <Age>42</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>42</ID>
    <Name>緒方 智子</Name>
    <Yomigana>おがた ともこ</Yomigana>
    <Age>71</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>43</ID>
    <Name>小松 早苗</Name>
    <Yomigana>こまつ さなえ</Yomigana>
    <Age>44</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>44</ID>
    <Name>白井 由香</Name>
    <Yomigana>しらい ゆか</Yomigana>
    <Age>37</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>45</ID>
    <Name>大山 美里</Name>
    <Yomigana>おおやま みさと</Yomigana>
    <Age>48</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>46</ID>
    <Name>今井 真紀子</Name>
    <Yomigana>いまい まきこ</Yomigana>
    <Age>44</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>47</ID>
    <Name>中尾 千晶</Name>
    <Yomigana>なかお ちあき</Yomigana>
    <Age>50</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>48</ID>
    <Name>佐藤 紗智子</Name>
    <Yomigana>さとう さちこ</Yomigana>
    <Age>37</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>49</ID>
    <Name>松本 雪乃</Name>
    <Yomigana>まつもと ゆきの</Yomigana>
    <Age>27</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>50</ID>
    <Name>大平 千尋</Name>
    <Yomigana>おおひら ちひろ</Yomigana>
    <Age>53</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>51</ID>
    <Name>金子 恵梨</Name>
    <Yomigana>かねこ えり</Yomigana>
    <Age>75</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>52</ID>
    <Name>今井 睦</Name>
    <Yomigana>いまい むつみ</Yomigana>
    <Age>71</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>53</ID>
    <Name>佐々木 真利子</Name>
    <Yomigana>ささき まりこ</Yomigana>
    <Age>34</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>54</ID>
    <Name>神戸 真由美</Name>
    <Yomigana>かんべ まゆみ</Yomigana>
    <Age>42</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>55</ID>
    <Name>小倉 和代</Name>
    <Yomigana>おぐら かずよ</Yomigana>
    <Age>68</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>56</ID>
    <Name>井上 静江</Name>
    <Yomigana>いのうえ しずえ</Yomigana>
    <Age>11</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>57</ID>
    <Name>大橋 香奈子</Name>
    <Yomigana>おおはし かなこ</Yomigana>
    <Age>51</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>58</ID>
    <Name>西野 千穂</Name>
    <Yomigana>にしの ちほ</Yomigana>
    <Age>59</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>59</ID>
    <Name>上野 麻理子</Name>
    <Yomigana>うえの まりこ</Yomigana>
    <Age>15</Age>
    <Gender>2</Gender>
  </USER>
  <USER>
    <ID>60</ID>
    <Name>森本 夕子</Name>
    <Yomigana>もりもと ゆうこ</Yomigana>
    <Age>23</Age>
    <Gender>2</Gender>
  </USER>
  <PREFECTURES>
    <ID>1</ID>
    <Name>北海道</Name>
    <Population>5224614</Population>
    <Household>2469063</Household>
    <Area>83424.44</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>2</ID>
    <Name>青森県</Name>
    <Population>1237984</Population>
    <Household>509649</Household>
    <Area>9645.64</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>3</ID>
    <Name>岩手県</Name>
    <Population>1210534</Population>
    <Household>490828</Household>
    <Area>15275.01</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>4</ID>
    <Name>宮城県</Name>
    <Population>2301996</Population>
    <Household>980549</Household>
    <Area>7282.29</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>5</ID>
    <Name>秋田県</Name>
    <Population>959502</Population>
    <Household>383531</Household>
    <Area>11637.52</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>6</ID>
    <Name>山形県</Name>
    <Population>1068027</Population>
    <Household>396792</Household>
    <Area>9323.15</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>7</ID>
    <Name>福島県</Name>
    <Population>1833152</Population>
    <Household>740089</Household>
    <Area>13784.14</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>8</ID>
    <Name>茨城県</Name>
    <Population>2867009</Population>
    <Household>1181598</Household>
    <Area>6097.39</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>9</ID>
    <Name>栃木県</Name>
    <Population>1933146</Population>
    <Household>795449</Household>
    <Area>6408.09</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>10</ID>
    <Name>群馬県</Name>
    <Population>1939110</Population>
    <Household>803215</Household>
    <Area>6362.28</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>11</ID>
    <Name>埼玉県</Name>
    <Population>7344765</Population>
    <Household>3157627</Household>
    <Area>3797.75</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>12</ID>
    <Name>千葉県</Name>
    <Population>6284480</Population>
    <Household>2767661</Household>
    <Area>5157.57</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>13</ID>
    <Name>東京都</Name>
    <Population>14047594</Population>
    <Household>7216650</Household>
    <Area>2194.03</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>14</ID>
    <Name>神奈川県</Name>
    <Population>9237337</Population>
    <Household>4210122</Household>
    <Area>2416.11</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>15</ID>
    <Name>新潟県</Name>
    <Population>2201272</Population>
    <Household>862796</Household>
    <Area>12583.96</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>16</ID>
    <Name>富山県</Name>
    <Population>1034814</Population>
    <Household>403007</Household>
    <Area>4247.58</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>17</ID>
    <Name>石川県</Name>
    <Population>1132526</Population>
    <Household>468835</Household>
    <Area>4186.21</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>18</ID>
    <Name>福井県</Name>
    <Population>766863</Population>
    <Household>290692</Household>
    <Area>4190.52</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>19</ID>
    <Name>山梨県</Name>
    <Population>809974</Population>
    <Household>338057</Household>
    <Area>4465.27</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>20</ID>
    <Name>長野県</Name>
    <Population>2048011</Population>
    <Household>829979</Household>
    <Area>13561.56</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>21</ID>
    <Name>岐阜県</Name>
    <Population>1978742</Population>
    <Household>779029</Household>
    <Area>10621.29</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>22</ID>
    <Name>静岡県</Name>
    <Population>3633202</Population>
    <Household>1480969</Household>
    <Area>7777.35</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>23</ID>
    <Name>愛知県</Name>
    <Population>7542415</Population>
    <Household>3233126</Household>
    <Area>5173.07</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>24</ID>
    <Name>三重県</Name>
    <Population>1770254</Population>
    <Household>741183</Household>
    <Area>5774.49</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>25</ID>
    <Name>滋賀県</Name>
    <Population>1413610</Population>
    <Household>570529</Household>
    <Area>4017.38</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>26</ID>
    <Name>京都府</Name>
    <Population>2578087</Population>
    <Household>1188903</Household>
    <Area>4612.2</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>27</ID>
    <Name>大阪府</Name>
    <Population>8837685</Population>
    <Household>4126995</Household>
    <Area>1905.32</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>28</ID>
    <Name>兵庫県</Name>
    <Population>5465002</Population>
    <Household>2399358</Household>
    <Area>8401.02</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>29</ID>
    <Name>奈良県</Name>
    <Population>1324473</Population>
    <Household>543908</Household>
    <Area>3690.94</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>30</ID>
    <Name>和歌山県</Name>
    <Population>922584</Population>
    <Household>393489</Household>
    <Area>4724.65</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>31</ID>
    <Name>鳥取県</Name>
    <Population>553407</Population>
    <Household>219069</Household>
    <Area>3507.14</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>32</ID>
    <Name>島根県</Name>
    <Population>671126</Population>
    <Household>268462</Household>
    <Area>6707.89</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>33</ID>
    <Name>岡山県</Name>
    <Population>1888432</Population>
    <Household>799611</Household>
    <Area>7114.33</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>34</ID>
    <Name>広島県</Name>
    <Population>2799702</Population>
    <Household>1241204</Household>
    <Area>8479.65</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>35</ID>
    <Name>山口県</Name>
    <Population>1342059</Population>
    <Household>597309</Household>
    <Area>6112.54</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>36</ID>
    <Name>徳島県</Name>
    <Population>719559</Population>
    <Household>307358</Household>
    <Area>4146.75</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>37</ID>
    <Name>香川県</Name>
    <Population>950244</Population>
    <Household>406062</Household>
    <Area>1876.78</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>38</ID>
    <Name>愛媛県</Name>
    <Population>1334841</Population>
    <Household>599941</Household>
    <Area>5676.19</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>39</ID>
    <Name>高知県</Name>
    <Population>691527</Population>
    <Household>314330</Household>
    <Area>7103.63</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>40</ID>
    <Name>福岡県</Name>
    <Population>5135214</Population>
    <Household>2318479</Household>
    <Area>4986.51</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>41</ID>
    <Name>佐賀県</Name>
    <Population>811442</Population>
    <Household>311173</Household>
    <Area>2440.69</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>42</ID>
    <Name>長崎県</Name>
    <Population>1312317</Population>
    <Household>556130</Household>
    <Area>4130.98</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>43</ID>
    <Name>熊本県</Name>
    <Population>1738301</Population>
    <Household>716740</Household>
    <Area>7409.46</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>44</ID>
    <Name>大分県</Name>
    <Population>1123852</Population>
    <Household>487679</Household>
    <Area>6340.76</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>45</ID>
    <Name>宮崎県</Name>
    <Population>1069576</Population>
    <Household>468575</Household>
    <Area>7735.22</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>46</ID>
    <Name>鹿児島県</Name>
    <Population>1588256</Population>
    <Household>725855</Household>
    <Area>9187.06</Area>
  </PREFECTURES>
  <PREFECTURES>
    <ID>47</ID>
    <Name>沖縄県</Name>
    <Population>1467480</Population>
    <Household>613294</Household>
    <Area>2282.59</Area>
  </PREFECTURES>
</MYDATASET>

DataSetを使って、XMLを読み込む

Datatableで出力したXMLファイルを読み込みます。
注意点としては書き込みをしたDatatableのTable名と列情報が一致していないとエラーになります。

//出力先を取得
string input_path = "";
using (OpenFileDialog dlg = new OpenFileDialog())
{
    dlg.Filter = @"XML(*.xml)|*.xml";

    if (dlg.ShowDialog() != DialogResult.OK)
    {
        //OK以外は処理を抜ける
        return;
    }

    input_path = dlg.FileName;
}

//*************************
//ユーザーのデータを作成
//************************

//XMLのトップタグの名称
const string XML_NAME_USER = "USER";

//テーブルを作成
DataTable user_table = new DataTable(XML_NAME_USER);

//列を作成
user_table.Columns.Add(nameof(UserClass.ID), typeof(int));
user_table.Columns.Add(nameof(UserClass.Name), typeof(string));
user_table.Columns.Add(nameof(UserClass.Yomigana), typeof(string));
user_table.Columns.Add(nameof(UserClass.Age), typeof(int));
user_table.Columns.Add(nameof(UserClass.Gender), typeof(UserClass.ENM_GENDER));

//*************************
//都道府県のデータを作成
//************************

//XMLのトップタグの名称
const string XML_NAME_PREFECTURES = "PREFECTURES";

//テーブルを作成
DataTable prefectures_table = new DataTable(XML_NAME_PREFECTURES);

//列を作成
prefectures_table.Columns.Add(nameof(PrefecturesClass.ID), typeof(int));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Name), typeof(string));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Population), typeof(string));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Household), typeof(int));
prefectures_table.Columns.Add(nameof(PrefecturesClass.Area), typeof(double));

//DataSetを作成
const string XML_NAME_DATASET = "MYDATASET";
DataSet ds = new DataSet(XML_NAME_DATASET);

//DataTableを作成
ds.Tables.Add(user_table);
ds.Tables.Add(prefectures_table);

//XML出力
ds.ReadXml(input_path);

実行結果

まとめ

データ群を一つのXMLファイルに出力する方法を紹介しました。

例では、DataSetの作成を行っていますが、このDataSetの作成をあらかじめ別のところで行いアプリ側で作業し、書き込みするときにWriteXml、読み込むときにReadXmlを呼び出してあげればいいので必ずしも上記のように記載する必要はありません。

この記事が皆様のお役に立てれば幸いです。

コメント

タイトルとURLをコピーしました