今天开发一个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 = ;
float y = ;
float z = ;
double threshold = ;
if (doors.ChildNodes.Count > )
{
//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 = ;
float y = ;
float z = ;
float radius = ;
if (objects.ChildNodes.Count > )
{
//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 = ;
float y = ;
float z = ;
if (objects.ChildNodes.Count > )
{
//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的更多相关文章

  1. 用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……

    大家有没有这样的感受,一涉及XML文档操作就得百度一遍.是不是非!常!烦!.各种类型,各种方法,更别提为了找到一个节点多费劲.本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果 ...

  2. XmlValidationHelper XSD、Schema(XmlSchemaSet)、XmlReader(XmlValidationSettings)、XmlDocument、XDocument Validate

    namespace Test { using Microshaoft; using System; using System.Xml; using System.Xml.Linq; class Pro ...

  3. C# XML技术总结之XDocument 和XmlDocument

    引言 虽然现在Json在我们的数据交换中越来越成熟,但XML格式的数据还有很重要的地位. C#中对XML的处理也不断优化,那么我们如何选择XML的这几款处理类 XmlReader,XDocument ...

  4. c#操作xml文件(XmlDocument,XmlTextReader,Linq To Xml)

    主界面

  5. jquery中ajax在firefox浏览器下“object XMLDocument”返回结果的解决办法

    asp.net中借助jquery的ajax处理功能,使用起来很方便.但是在firefox下获得的data报错object XMLDocument.这是因为默认的情况下把datatype用html来解析 ...

  6. XmlDocument解析Soap格式文件案例:

    private static string Analysis(string strResult) { var doc = new System.Xml.XmlDocument(); //加载soap文 ...

  7. 将XmlDocument转换成XDocument

    XmlDocument xml=new XmlDocument(); xml.LoadXml(strXmlText); XmlReader xr=new XmlNodeReader(xml); XDo ...

  8. XmlDocument To String

    一.从String xml到XmlDocument的: string xml = "<XML><Test>Hello World</Test></X ...

  9. c# xml的增删改查操作 xmlDocument 的用法

    1.将xml转换为DataTable string path = "";//xml的位置StringReader sr = null;XmlTextReader xmlReader ...

随机推荐

  1. Shell教程

    http://www.reddragonfly.org/abscn/index.html

  2. Linux下使用crontab定时备份日志

    上周学习了Linux,其中有使用crontab定时备份日志的内容,现把主要步骤记录如下: 首先需要备份的日志的源目录位于/opt/lampp/logs/access_log 备份到/tmp/logs下 ...

  3. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  4. [LeetCode] Single Number III 单独的数字之三

    Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...

  5. [LeetCode] ZigZag Converesion 之字型转换字符串

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  6. 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串

    写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...

  7. C# Webbrowser 常用方法及多线程调用

    设置控件的值 /// <summary> /// 根据ID,NAME双重判断并设置值 /// </summary> /// <param name="tagNa ...

  8. 冰冻三尺非一日之寒--Django框架【进阶篇】

    第十九章  Django进阶 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...

  9. Android基础总结(七)

    广播(掌握) 广播的概念 现实:电台通过发送广播发布消息,买个收音机,就能收听 Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件. Andro ...

  10. 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法

    原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...