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 ...
随机推荐
- Servlet入门笔记
一.一个简单的Servlet 在servlet 3.0之前,下面是基本步骤: 1.新建一个class名为FirstServlet,让它继承javax.servlet.http.HttpServlet: ...
- Linux NFS服务器的安装与配置
一.NFS服务简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操 ...
- python_接口开发
一.GET和POST请求from flask import Flask,jsonifydata = { 'name':'Jerry', 'sex':'男', 'age':'18'}app = Flas ...
- Django rest_framework 实用技巧
前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...
- [LeetCode] Repeated Substring Pattern 重复子字符串模式
Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...
- [LeetCode] Find the Celebrity 寻找名人
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
- [LeetCode] Valid Sudoku 验证数独
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- 【原】Spark之机器学习(Python版)(二)——分类
写这个系列是因为最近公司在搞技术分享,学习Spark,我的任务是讲PySpark的应用,因为我主要用Python,结合Spark,就讲PySpark了.然而我在学习的过程中发现,PySpark很鸡肋( ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- LISA介绍及其使用方法
LISA是ARM公司开发的一款开源工具.在内核开发过程中,苦于无法针对修改内容进行一些量化或者可视化结果的测量,而无感.LISA对于模型调优,回归测试都有较强的支持. 什么是LISA? LISA是Li ...