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 = ;
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的更多相关文章
- 用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……
大家有没有这样的感受,一涉及XML文档操作就得百度一遍.是不是非!常!烦!.各种类型,各种方法,更别提为了找到一个节点多费劲.本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果 ...
- XmlValidationHelper XSD、Schema(XmlSchemaSet)、XmlReader(XmlValidationSettings)、XmlDocument、XDocument Validate
namespace Test { using Microshaoft; using System; using System.Xml; using System.Xml.Linq; class Pro ...
- C# XML技术总结之XDocument 和XmlDocument
引言 虽然现在Json在我们的数据交换中越来越成熟,但XML格式的数据还有很重要的地位. C#中对XML的处理也不断优化,那么我们如何选择XML的这几款处理类 XmlReader,XDocument ...
- c#操作xml文件(XmlDocument,XmlTextReader,Linq To Xml)
主界面
- jquery中ajax在firefox浏览器下“object XMLDocument”返回结果的解决办法
asp.net中借助jquery的ajax处理功能,使用起来很方便.但是在firefox下获得的data报错object XMLDocument.这是因为默认的情况下把datatype用html来解析 ...
- XmlDocument解析Soap格式文件案例:
private static string Analysis(string strResult) { var doc = new System.Xml.XmlDocument(); //加载soap文 ...
- 将XmlDocument转换成XDocument
XmlDocument xml=new XmlDocument(); xml.LoadXml(strXmlText); XmlReader xr=new XmlNodeReader(xml); XDo ...
- XmlDocument To String
一.从String xml到XmlDocument的: string xml = "<XML><Test>Hello World</Test></X ...
- c# xml的增删改查操作 xmlDocument 的用法
1.将xml转换为DataTable string path = "";//xml的位置StringReader sr = null;XmlTextReader xmlReader ...
随机推荐
- Java泛型及实践
代码及说明: package com.zsm.crazyjava; import java.util.ArrayList; import java.util.Collection; import ja ...
- POJ 1637 Sightseeing tour
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9276 Accepted: 3924 ...
- Redis的使用场景 by 杨卫华
转载自新浪微博架构师杨卫华的博客 http://timyang.net/tag/redis/,省略了部分内容 按:杨卫华在2010年就已经测试了Redis的性能,并给出了初步的结论:“Redis性能惊 ...
- 解读ASP.NET 5 & MVC6系列(17):MVC中的其他新特性
(GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtml平级,该文件的功能类 ...
- [LeetCode] Palindrome Partitioning II 拆分回文串之二
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- R - MQ
1. rabbit MQ 安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接下载安装3.2.3 版本: 下载并安装 ...
- 以.net core重构原有.net framework过程中的一些API变更记录(持续更新)
1)Type.IsGenericType类似属性变更 以下是.net framework 4.5中Type抽象类中泛型类型的几个个属性,用于泛型类型的相关信息判断: 以下是.net core(nets ...
- 个人作业-Week2
第一部分 调研, 评测 运行平台 win 8 软件版本:微软必应词典桌面版 3.5.2 BUG标题:必应背单词无法发音 BUG详细描述:如图,左边为必应词典该单词的搜索,可以发音,而右边必应背单词中 ...
- ajax的简单介绍
响应主体,就是服务器给我们返回的结果内容(浏览器里的responsive) 请求主体,是我们给服务器的数据 输入域名发起一次请求,得到的可能是标签,标签可能还要在发一次请求 post怎么发请求:for ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...