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>

  

你可能感兴趣的:(document)