.NET の System.Data.DataTable。みんな大好きですよね?
実はあまり知られていない事実ですが、DataTable は XML を扱えます。
using System.Data; // 中身を XML ファイルに出力 { var dt = new DataTable(); dt.TableName = "saitama"; dt.Columns.Add("no"); dt.Columns.Add("name"); dt.Rows.Add(new object[] { 1, "せんべい" }); dt.Rows.Add(new object[] { 2, "ねぎ" }); dt.WriteXmlSchema("schema.xml"); dt.WriteXml("data.xml"); } // XML ファイルから読み込み { var dt = new DataTable(); dt.ReadXmlSchema("schema.xml"); dt.ReadXml("data.xml"); System.Console.WriteLine($"TebleName:{dt.TableName}"); foreach (var row in dt.AsEnumerable()) { foreach (DataColumn column in dt.Columns) System.Console.Write($"{column.ColumnName}:{row[column.ColumnName]} "); System.Console.WriteLine(); } }
実行結果
コンソール出力
TebleName:saitama no:1 name:せんべい no:2 name:ねぎ
schema.xml
<?xml version="1.0" standalone="yes"?> <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="saitama" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="saitama"> <xs:complexType> <xs:sequence> <xs:element name="no" type="xs:string" minOccurs="0" /> <xs:element name="name" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema>
data.xml
<?xml version="1.0" standalone="yes"?> <DocumentElement> <saitama> <no>1</no> <name>せんべい</name> </saitama> <saitama> <no>2</no> <name>ねぎ</name> </saitama> </DocumentElement>
作り捨てアプリであれば意外に便利に使えたりします。
しかし役に立つ機会はあまりないかもしれないので、誰かに「できる」と言われたときに「できない」と主張してしまわない程度に覚えておきましょう。