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>
相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
公众号推荐
   一个历史类的公众号,欢迎关注
一两拨千金