【C#】XMLを扱ってみる
ほとんどJSONの時と同じ
1. XMLファイル作成用メソッドを用意
using System.IO; // ←追加 using System.Xml.Serialization; // ← 追加 namespace XMLTestApp { public static class XmlUtils { /// <summary> /// XMLデータ書き込み /// </summary> /// <param name="obj">XMLへ変換するオブジェクト</param> /// <param name="filePath">作成するXMLファイルのパス</param> public static void writeXml (object obj, string filePath) { using (FileStream fs = new FileStream(filePath.ToString(), FileMode.Create)) using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8)) { XmlSerializer serializer = new XmlSerializer(typeof(XML.XmlData)); serializer.Serialize(sw, xmlData); } } } }
2. XMLファイル読込用メソッドを用意
using System.IO; // ←追加 using System.Xml.Serialization; // ← 追加 namespace XMLTestApp { public static class XmlUtils { /// <summary> /// XMLデータ読み込み /// </summary> /// <typeparam name="T"></typeparam> /// <param name="filePath">読み込むXMLファイルのパス</param> /// <returns>XMLから変換されたオブジェクト</returns> public static T readXml<T> (string filePath) { if (!File.Exists(filePath.TOString())) { // ファイルが存在しない場合終了 return null; } using (FileStream fs = new FileStream(filePath.ToString(), FileMode.Open)) { XmlSerializer serializer = new XmlSerializer(typeof(XML.XmlData)); return (T)serializer.Deserialize(fs); } } } }
3. 実際の使用例
まずXMLへ変換するためのオブジェクトクラスを作成
using System.Xml.Serialization; // ←追加 namespace XMLTestApp { [XmlRoot("PersonList")] public class SampleData { [XmlElement("person")] public List<Person> person { get; set; } } public class Person { [XmlAttribute("name")] public string name { get; set; } [XmlElement("age")] public string age { get; set; } [XmlElement("sex")] public string sex { get; set; } } }
①オブジェクトからXMLへ変換
static void Main(string[] args) { // サンプルデータを準備 SampleData data = new SampleData(); // 一人目の顧客情報 Person person1 = new Person(); person1.name = "大泉 洋"; person1.age = "44歳"; person1.sex = "男"; // 二人目の顧客情報 Person person2 = new Person(); person2.name = "安田 顕"; person2.age = "43歳"; person2.sex = "男"; // 三人目の顧客情報 Person person3 = new Person(); person3.name = "鈴井 貴之"; person3.age = "55歳"; person3.sex = "男"; data.add(person1); data.add(person2); data.add(person3); // オブジェクトからXMLへ変換 string filePath = "C:\sample.xml" XmlUtils.writeXml(data, filePath); }
↓結果、以下の内容のXMLファイルが作成される
<?xml version="1.0" encoding="utf-8"?> <PersonList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <person name="大泉 洋"> <age>44歳</age> <sex>男</sex> </person> <person name="安田 顕"> <age>43歳</age> <sex>男</sex> </person> <person name="鈴井 貴之"> <age>55歳</age> <sex>男</sex> </person> </PersonList>
②XMLからオブジェクトへ変換
※XMLファイルは上記で作成したものを使用
static void Main(string[] args) { // XMLからオブジェクトへ変換 string filePath = "C:\sample.xml" SampleData data = XmlUtils.readXml<SampleData>(filePath); foreach (Person p in data.person) { Console.WriteLine(p.name); Console.WriteLine(p.age); Console.WriteLine(p.sex); Console.WriteLine("\n"); } }
↓コンソール出力
大泉 洋 44歳 男 安田 顕 43歳 男 鈴井 貴之 55歳 男