首页 > 代码库 > C# XMLDocument

C# XMLDocument

 

今天开发一个WPF模块需要本地化保存一些用户设置,鉴于数据量不大,用XML。 (要是再小的话可以用Resources 和 Settings)。

清晰简短教程移步:http://bdk82924.iteye.com/blog/564353

代码如下:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Xml;using System.Xml.Serialization;using Microsoft.Kinect;namespace KinectHost{    class SettingsXMLConfig    {        public SettingsXMLConfig(){            createXML();        }        public void AddDoor(string name, string x, string y, string z, string threshold)        {            try            {                XmlElement doors = null;                XmlElement theDoor = null, theName = null, theX = null, theY = null, theZ = null, theThreshold = null, root = null;                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    doors = (XmlElement)root.SelectSingleNode("/XMLSettings/doors");                    theDoor = xmlSetting.CreateElement("door");                    theName = xmlSetting.CreateElement("name");                    theName.InnerText = name;                    theX = xmlSetting.CreateElement("x");                    theX.InnerText = x;                    theY = xmlSetting.CreateElement("y");                    theY.InnerText = y;                    theZ = xmlSetting.CreateElement("z");                    theZ.InnerText = z;                    theThreshold = xmlSetting.CreateElement("threshold");                    theThreshold.InnerText = threshold;                    theDoor.AppendChild(theName);                    theDoor.AppendChild(theX);                    theDoor.AppendChild(theY);                    theDoor.AppendChild(theZ);                    theDoor.AppendChild(theThreshold);                    doors.AppendChild(theDoor);                    xmlSetting.Save(filepath);                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());            }        }        public void RemoveDoor(string name)        {            XmlElement root = null, door = null;            try            {                 string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    door = (XmlElement)root.SelectSingleNode("/XMLSettings/doors/door[name=‘" + name + "‘]");                    door.ParentNode.RemoveChild(door);                                                         xmlSetting.Save(filepath);                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());            }        }        public List<CrossDoorDetector> SelectDoors(KinectSensor kinectSensor){            XmlElement root = null, doors = null;            List<CrossDoorDetector> crossDoorDetectorList = new List<CrossDoorDetector>();            try            {                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    doors = (XmlElement)root.SelectSingleNode("/XMLSettings/doors");                    string name = "";                    float x = 0;                    float y = 0;                    float z = 0;                    double threshold = 0;                    if (doors.ChildNodes.Count > 0)                    {                        //XmlNode xn = doors.SelectSingleNode("door");                        XmlNodeList xnl = doors.ChildNodes;                        foreach (XmlNode xnf in xnl)                        {                            XmlElement xe = (XmlElement)xnf;                            name = ((XmlElement)xe.SelectSingleNode("name")).InnerText;                            float.TryParse(((XmlElement)xe.SelectSingleNode("x")).InnerText, out x);                            float.TryParse(((XmlElement)xe.SelectSingleNode("y")).InnerText, out y);                            float.TryParse(((XmlElement)xe.SelectSingleNode("z")).InnerText, out z);                            double.TryParse(((XmlElement)xe.SelectSingleNode("threshold")).InnerText, out threshold);                            crossDoorDetectorList.Add(new CrossDoorDetector(name, x, y, z, threshold, kinectSensor));                        }                        return crossDoorDetectorList;                    }                    else                    {                        return null;                    }                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                    return null;                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());                return null;            }        }        public void AddObject(string name, string x, string y, string z, string radius)        {            try            {                XmlElement doors = null;                XmlElement theObject = null, theName = null, theX = null, theY = null, theZ = null, ObjectRadius = null, root = null;                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    doors = (XmlElement)root.SelectSingleNode("/XMLSettings/objects");                    theObject = xmlSetting.CreateElement("object");                    theName = xmlSetting.CreateElement("name");                    theName.InnerText = name;                    theX = xmlSetting.CreateElement("x");                    theX.InnerText = x;                    theY = xmlSetting.CreateElement("y");                    theY.InnerText = y;                    theZ = xmlSetting.CreateElement("z");                    theZ.InnerText = z;                    ObjectRadius = xmlSetting.CreateElement("radius");                    ObjectRadius.InnerText = radius;                    theObject.AppendChild(theName);                    theObject.AppendChild(theX);                    theObject.AppendChild(theY);                    theObject.AppendChild(theZ);                    theObject.AppendChild(ObjectRadius);                    doors.AppendChild(theObject);                    xmlSetting.Save(filepath);                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());            }        }        public List<ObjectPointing> SelectObjects()        {            XmlElement root = null, objects = null;            List<ObjectPointing> objectPointingList = new List<ObjectPointing>();            try            {                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    objects = (XmlElement)root.SelectSingleNode("/XMLSettings/objects");                    string name = "";                    float x = 0;                    float y = 0;                    float z = 0;                    float radius = 0;                    if (objects.ChildNodes.Count > 0)                    {                        //XmlNode xn = doors.SelectSingleNode("door");                        XmlNodeList xnl = objects.ChildNodes;                        foreach (XmlNode xnf in xnl)                        {                            XmlElement xe = (XmlElement)xnf;                            name = ((XmlElement)xe.SelectSingleNode("name")).InnerText;                            float.TryParse(((XmlElement)xe.SelectSingleNode("x")).InnerText, out x);                            float.TryParse(((XmlElement)xe.SelectSingleNode("y")).InnerText, out y);                            float.TryParse(((XmlElement)xe.SelectSingleNode("z")).InnerText, out z);                            float.TryParse(((XmlElement)xe.SelectSingleNode("radius")).InnerText, out radius);                            objectPointingList.Add(new ObjectPointing(name, x, y, z, radius));                        }                        return objectPointingList;                    }                    else                    {                        return null;                    }                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                    return null;                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());                return null;            }        }        public void RemoveObject(string name)        {            XmlElement root = null, Object = null;            try            {                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    Object = (XmlElement)root.SelectSingleNode("/XMLSettings/objects/object[name=‘" + name + "‘]");                    Object.ParentNode.RemoveChild(Object);                    xmlSetting.Save(filepath);                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());            }        }        public void AddLocation(string name, string x, string y, string z)        {            try            {                XmlElement doors = null;                XmlElement theLocation = null, theName = null, theX = null, theY = null, theZ = null, root = null;                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    doors = (XmlElement)root.SelectSingleNode("/XMLSettings/locations");                    theLocation = xmlSetting.CreateElement("location");                    theName = xmlSetting.CreateElement("name");                    theName.InnerText = name;                    theX = xmlSetting.CreateElement("x");                    theX.InnerText = x;                    theY = xmlSetting.CreateElement("y");                    theY.InnerText = y;                    theZ = xmlSetting.CreateElement("z");                    theZ.InnerText = z;                    theLocation.AppendChild(theName);                    theLocation.AppendChild(theX);                    theLocation.AppendChild(theY);                    theLocation.AppendChild(theZ);                    doors.AppendChild(theLocation);                    xmlSetting.Save(filepath);                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());            }        }        public List<LocationDetector> SelectLocations()        {            XmlElement root = null, objects = null;            List<LocationDetector> locationDetectorList = new List<LocationDetector>();            try            {                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    objects = (XmlElement)root.SelectSingleNode("/XMLSettings/locations");                    string name = "";                    float x = 0;                    float y = 0;                    float z = 0;                    if (objects.ChildNodes.Count > 0)                    {                        //XmlNode xn = doors.SelectSingleNode("door");                        XmlNodeList xnl = objects.ChildNodes;                        foreach (XmlNode xnf in xnl)                        {                            XmlElement xe = (XmlElement)xnf;                            name = ((XmlElement)xe.SelectSingleNode("name")).InnerText;                            float.TryParse(((XmlElement)xe.SelectSingleNode("x")).InnerText, out x);                            float.TryParse(((XmlElement)xe.SelectSingleNode("y")).InnerText, out y);                            float.TryParse(((XmlElement)xe.SelectSingleNode("z")).InnerText, out z);                            locationDetectorList.Add(new LocationDetector(name, x, y, z));                        }                        return locationDetectorList;                    }                    else                    {                        return null;                    }                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                    return null;                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());                return null;            }        }        public void RemoveLocation(string name)        {            XmlElement root = null, location = null;            try            {                string path = GetFolderPath();                string filepath = Path.Combine(path, "XMLSettings.xml");                if (File.Exists(filepath))                {                    XmlDocument xmlSetting = new XmlDocument();                    xmlSetting.Load(filepath);                    root = xmlSetting.DocumentElement;                    location = (XmlElement)root.SelectSingleNode("/XMLSettings/locations/location[name=‘" + name + "‘]");                    location.ParentNode.RemoveChild(location);                    xmlSetting.Save(filepath);                }                else                {                    MessageBox.Show("XML Settings file doesn‘t extist!");                }            }            catch (Exception exc)            {                MessageBox.Show(exc.ToString());            }        }        private string GetFolderPath()        {            string folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XML");            if (!Directory.Exists(folder))            {                Directory.CreateDirectory(folder);            }            return folder;        }        private void createXML(){            string path = GetFolderPath();            string filepath = Path.Combine(path, "XMLSettings.xml");            if (!File.Exists(filepath))            {                XmlDocument xmlSetting = new XmlDocument();                XmlElement root = xmlSetting.CreateElement("XMLSettings");                xmlSetting.AppendChild(root);                XmlElement doors = xmlSetting.CreateElement("doors");                XmlElement objects = xmlSetting.CreateElement("objects");                XmlElement locations = xmlSetting.CreateElement("locations");                root.AppendChild(doors);                root.AppendChild(objects);                root.AppendChild(locations);                //string folder = Path.Combine(path, "XMLSettings.xml");                xmlSetting.Save(filepath);            }         }    }}

XML结果:

<XMLSettings>  <doors>    <door>      <name>Bedroom0</name>      <x>165.5378</x>      <y>208.586</y>      <z>2.553757</z>      <threshold>66.0010801284721</threshold>    </door>  </doors>  <objects>    <object>      <name>Light</name>      <x>-0.1636572</x>      <y>0.762675</y>      <z>1.719781</z>      <radius>0.3</radius>    </object>  </objects>  <locations>    <location>      <name>Desk</name>      <x>0.02907251</x>      <y>0.02481232</y>      <z>2.383653</z>    </location>  </locations></XMLSettings>

  

C# XMLDocument