今天开发一个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. After the exam

    离散数学考完啦!!!自我感觉还行,或许得不到高分,但是过的话是没问题了.(但愿成绩出来后不打脸) 持续了两周的复习,告一段落了.那么,今天就休息休息吧. 今天阴有雨,走过的地儿都是湿漉漉.滑溜溜的.这 ...

  2. [LeetCode] Hamming Distance 汉明距离

    The Hamming distance between two integers is the number of positions at which the corresponding bits ...

  3. [LeetCode] Symmetric Tree 判断对称树

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  4. LTE中的各种ID含义

    原文链接:http://www.hropt.com/ask/?q-7128.html ECI (28 Bits) = eNB ID(20 Bits) + Cell ID(8 Bits) 换成16进制就 ...

  5. EncodingHelper

    /// <summary> /// Url解码 /// </summary> /// <param name="str">原始字符串</p ...

  6. mybatis多对一关联

    mybatis多对一关联查询实现 1.定义实体 定义实体的时候需要注意,若是双向关联,就是说双方的属性中都含有对方对象作为域属性出现, 那么在写toString()方法时需要注意,只让某一方输出即可, ...

  7. 比较.NET程序集(DLL或EXE)是否相同

    如何比较两个.NET程序集(DLL或EXE)是否相同呢? 直接比较文件内容?当然没那么简单了,这个你可以去试试,去比较一下两次Build产生的程序集, 就算内容没有改变,产生的程序集的二进制文件也是不 ...

  8. 使用PrintDocument进行打印

    背景: 1.在winform中,需要直接调用打印机,进行打印处理 2.找了很多实现方法是web的处理,然后查了下度娘,发现可以使用自带类PrintDocument进行处理,所以就有了这篇文章 说明: ...

  9. C阅读与学习

    征服C指针 C语言接口与实现:创建可重用软件的技术

  10. 在 Linux 中查看时区

    1.date date +"%Z %z" 或者 date -R 2.timedatectl timedatectl|grep "Timezone" 可以使用 t ...