FormでXML入力、読込と保存
フォームで入力した情報をXMLで保存、保存したXMLを読み込みできるようにした。
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--パーティクルデータ--> <particle> <header> <name type="string">abc</name> </header> <emitter> <rotX type="Int16">1</rotX> <rotY type="Int16">2</rotY> <rotZ type="Int16">3</rotZ> </emitter> <particle> <num type="UInt16">4</num> <interval type="UInt16">5</interval> <life type="UInt16">6</life> </particle> </particle>
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Xml.Linq; using System.Windows.Forms; namespace XMLEditor { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button_save_Click(object sender, EventArgs e) { // 情報の取得 string basename = textBox_name.Text; string filename = basename + ".xml"; Int16 emitter_rotX = (Int16)numUpDown_emitter_rotX.Value; Int16 emitter_rotY = (Int16)numUpDown_emitter_rotY.Value; Int16 emitter_rotZ = (Int16)numUpDown_emitter_rotZ.Value; UInt16 emit_num = (UInt16)numUpDown_emit_num.Value; UInt16 emit_interval = (UInt16)numUpDown_emit_interval.Value; UInt16 life = (UInt16)numUpDown_life.Value; // 保存する saveFileDialog.FileName = filename; saveFileDialog.InitialDirectory = @"D:\text\xml"; if(saveFileDialog.ShowDialog() == DialogResult.OK) { var particle_xml = new XDocument(new XDeclaration("1.0", "utf-8", "yes")); particle_xml.Add(new XComment("パーティクルデータ")); particle_xml.Add(new XElement("particle")); // Root // header XElement elem = new XElement("header"); XElement sub_elem = new XElement("name", basename); sub_elem.Add(new XAttribute("type", "string")); elem.Add(sub_elem); particle_xml.Root.Add(elem); // emitter elem = new XElement("emitter"); sub_elem = new XElement("rotX", emitter_rotX); sub_elem.Add(new XAttribute("type", "Int16")); elem.Add(sub_elem); sub_elem = new XElement("rotY", emitter_rotY); sub_elem.Add(new XAttribute("type", "Int16")); elem.Add(sub_elem); sub_elem = new XElement("rotZ", emitter_rotZ); sub_elem.Add(new XAttribute("type", "Int16")); elem.Add(sub_elem); particle_xml.Root.Add(elem); // particle elem = new XElement("particle"); sub_elem = new XElement("num", emit_num); sub_elem.Add(new XAttribute("type", "UInt16")); elem.Add(sub_elem); sub_elem = new XElement("interval", emit_interval); sub_elem.Add(new XAttribute("type", "UInt16")); elem.Add(sub_elem); sub_elem = new XElement("life", life); sub_elem.Add(new XAttribute("type", "UInt16")); elem.Add(sub_elem); particle_xml.Root.Add(elem); string save_path = saveFileDialog.FileName; particle_xml.Save(save_path); } } private void button_load_Click(object sender, EventArgs e) { // 読込 openFileDialog.InitialDirectory = @"D:\text\xml"; if(openFileDialog.ShowDialog() == DialogResult.OK) { string filename = openFileDialog.FileName; var load_xml = XDocument.Load(@filename); // header var query = from x in load_xml.Descendants("header") select x; textBox_name.Text = query.Elements("name").ElementAt(0).Value; // emitter query = from x in load_xml.Descendants("emitter") select x; numUpDown_emitter_rotX.Value = Int16.Parse(query.Elements("rotX").ElementAt(0).Value); numUpDown_emitter_rotY.Value = Int16.Parse(query.Elements("rotY").ElementAt(0).Value); numUpDown_emitter_rotZ.Value = Int16.Parse(query.Elements("rotZ").ElementAt(0).Value); // particle query = from x in load_xml.Descendants("particle") select x; numUpDown_emit_num.Value = UInt16.Parse(query.Elements("num").ElementAt(0).Value); numUpDown_emit_interval.Value = UInt16.Parse(query.Elements("interval").ElementAt(0).Value); numUpDown_life.Value = UInt16.Parse(query.Elements("life").ElementAt(0).Value); } } } }