博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# XMLDocument
阅读量:6569 次
发布时间:2019-06-24

本文共 14075 字,大约阅读时间需要 46 分钟。

 

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

清晰简短教程移步:

代码如下:

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
SelectDoors(KinectSensor kinectSensor){ XmlElement root = null, doors = null; List
crossDoorDetectorList = new List
(); 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
SelectObjects() { XmlElement root = null, objects = null; List
objectPointingList = new List
(); 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
SelectLocations() { XmlElement root = null, objects = null; List
locationDetectorList = new List
(); 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结果:

Bedroom0
165.5378
208.586
2.553757
66.0010801284721
Light
-0.1636572
0.762675
1.719781
0.3
Desk
0.02907251
0.02481232
2.383653

  

转载于:https://www.cnblogs.com/bruceyo/p/4049206.html

你可能感兴趣的文章
js 正则之检测素数
查看>>
linux-多线程
查看>>
第40周二
查看>>
使用虚拟机运行Ubuntu时,主机与宿主机共享文件的方法。
查看>>
EJB究竟是什么,真的那么神奇吗??
查看>>
海茶3 らぶデス3 入门经典教程
查看>>
pstree命令
查看>>
css选择器顺序的小技巧
查看>>
dojo 学习笔记之dojo.query - query(id) 与query(class)的差别
查看>>
Java基础加强总结(三)——代理(Proxy)
查看>>
一步一步写算法(之hash表)
查看>>
C99规范
查看>>
BZOJ3799 : 字符串重组
查看>>
数据持久化的复习
查看>>
Util应用程序框架公共操作类(八):Lambda表达式公共操作类(二)
查看>>
thinkphp查询
查看>>
iOS开发-Protocol协议及委托代理(Delegate)传值
查看>>
【BZOJ】1105: [POI2007]石头花园SKA
查看>>
MapReduce原理与设计思想
查看>>
Theano学习笔记(三)——图结构
查看>>