XMLファイルの入出力(DataTable)

ファイル/フォルダ

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 });

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

DataTableは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";

//テーブルを作成
DataTable dt = new DataTable(XML_NAME);

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

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

//ファイル出力
dt.WriteXml(output_path);

実行結果

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

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <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>
</DocumentElement>

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

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

//XMLファイルパスを取得
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";

//テーブルを作成
DataTable dt = new DataTable(XML_NAME);

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

//XMLファイル読込
dt.ReadXml(input_path);

実行結果

まとめ

単純なXMLファイルの出力であればこれが一番簡単なのではないかと思います。
この記事が皆様のお役に立てれば幸いです。

コメント

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