C# 操作XML文件,用XML文件保存信息
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO; namespace ConfigMgrTest
{
public class SystemConfig
{
#region"基本操作函数"
/// <summary>
/// 得到程序工作目录
/// </summary>
/// <returns></returns>
private static string GetWorkDirectory()
{
try
{
return Path.GetDirectoryName(typeof(SystemConfig).Assembly.Location);
}
catch
{
return System.Windows.Forms.Application.StartupPath;
}
}
/// <summary>
/// 判断字符串是否为空串
/// </summary>
/// <param name="szString">目标字符串</param>
/// <returns>true:为空串;false:非空串</returns>
private static bool IsEmptyString(string szString)
{
if (szString == null)
return true;
if (szString.Trim() == string.Empty)
return true;
return false;
}
/// <summary>
/// 创建一个制定根节点名的XML文件
/// </summary>
/// <param name="szFileName">XML文件</param>
/// <param name="szRootName">根节点名</param>
/// <returns>bool</returns>
private static bool CreateXmlFile(string szFileName, string szRootName)
{
if (szFileName == null || szFileName.Trim() == "")
return false;
if (szRootName == null || szRootName.Trim() == "")
return false; XmlDocument clsXmlDoc = new XmlDocument();
clsXmlDoc.AppendChild(clsXmlDoc.CreateXmlDeclaration("1.0", "GBK", null));
clsXmlDoc.AppendChild(clsXmlDoc.CreateNode(XmlNodeType.Element, szRootName, ""));
try
{
clsXmlDoc.Save(szFileName);
return true;
}
catch
{
return false;
}
} /// <summary>
/// 从XML文件获取对应的XML文档对象
/// </summary>
/// <param name="szXmlFile">XML文件</param>
/// <returns>XML文档对象</returns>
private static XmlDocument GetXmlDocument(string szXmlFile)
{
if (IsEmptyString(szXmlFile))
return null;
if (!File.Exists(szXmlFile))
return null;
XmlDocument clsXmlDoc = new XmlDocument();
try
{
clsXmlDoc.Load(szXmlFile);
}
catch
{
return null;
}
return clsXmlDoc;
} /// <summary>
/// 将XML文档对象保存为XML文件
/// </summary>
/// <param name="clsXmlDoc">XML文档对象</param>
/// <param name="szXmlFile">XML文件</param>
/// <returns>bool:保存结果</returns>
private static bool SaveXmlDocument(XmlDocument clsXmlDoc, string szXmlFile)
{
if (clsXmlDoc == null)
return false;
if (IsEmptyString(szXmlFile))
return false;
try
{
if (File.Exists(szXmlFile))
File.Delete(szXmlFile);
}
catch
{
return false;
}
try
{
clsXmlDoc.Save(szXmlFile);
}
catch
{
return false;
}
return true;
} /// <summary>
/// 获取XPath指向的单一XML节点
/// </summary>
/// <param name="clsRootNode">XPath所在的根节点</param>
/// <param name="szXPath">XPath表达式</param>
/// <returns>XmlNode</returns>
private static XmlNode SelectXmlNode(XmlNode clsRootNode, string szXPath)
{
if (clsRootNode == null || IsEmptyString(szXPath))
return null;
try
{
return clsRootNode.SelectSingleNode(szXPath);
}
catch
{
return null;
}
} /// <summary>
/// 获取XPath指向的XML节点集
/// </summary>
/// <param name="clsRootNode">XPath所在的根节点</param>
/// <param name="szXPath">XPath表达式</param>
/// <returns>XmlNodeList</returns>
private static XmlNodeList SelectXmlNodes(XmlNode clsRootNode, string szXPath)
{
if (clsRootNode == null || IsEmptyString(szXPath))
return null;
try
{
return clsRootNode.SelectNodes(szXPath);
}
catch
{
return null;
}
} /// <summary>
/// 创建一个XmlNode并添加到文档
/// </summary>
/// <param name="clsParentNode">父节点</param>
/// <param name="szNodeName">结点名称</param>
/// <returns>XmlNode</returns>
private static XmlNode CreateXmlNode(XmlNode clsParentNode, string szNodeName)
{
try
{
XmlDocument clsXmlDoc = null;
if (clsParentNode.GetType() != typeof(XmlDocument))
clsXmlDoc = clsParentNode.OwnerDocument;
else
clsXmlDoc = clsParentNode as XmlDocument;
XmlNode clsXmlNode = clsXmlDoc.CreateNode(XmlNodeType.Element, szNodeName, string.Empty);
if (clsParentNode.GetType() == typeof(XmlDocument))
{
clsXmlDoc.LastChild.AppendChild(clsXmlNode);
}
else
{
clsParentNode.AppendChild(clsXmlNode);
}
return clsXmlNode;
}
catch
{
return null;
}
} /// <summary>
/// 设置指定节点中指定属性的值
/// </summary>
/// <param name="parentNode">XML节点</param>
/// <param name="szAttrName">属性名</param>
/// <param name="szAttrValue">属性值</param>
/// <returns>bool</returns>
private static bool SetXmlAttr(XmlNode clsXmlNode, string szAttrName, string szAttrValue)
{
if (clsXmlNode == null)
return false;
if (IsEmptyString(szAttrName))
return false;
if (IsEmptyString(szAttrValue))
szAttrValue = string.Empty;
XmlAttribute clsAttrNode = clsXmlNode.Attributes.GetNamedItem(szAttrName) as XmlAttribute;
if (clsAttrNode == null)
{
XmlDocument clsXmlDoc = clsXmlNode.OwnerDocument;
if (clsXmlDoc == null)
return false;
clsAttrNode = clsXmlDoc.CreateAttribute(szAttrName);
clsXmlNode.Attributes.Append(clsAttrNode);
}
clsAttrNode.Value = szAttrValue;
return true;
}
#endregion #region"配置文件的读取和写入"
private static string CONFIG_FILE = "SystemConfig.xml";
/// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static int GetConfigData(string szKeyName, int nDefaultValue)
{
string szValue = GetConfigData(szKeyName, nDefaultValue.ToString());
try
{
return int.Parse(szValue);
}
catch
{
return nDefaultValue;
}
} /// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static float GetConfigData(string szKeyName, float fDefaultValue)
{
string szValue = GetConfigData(szKeyName, fDefaultValue.ToString());
try
{
return float.Parse(szValue);
}
catch
{
return fDefaultValue;
}
} /// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static bool GetConfigData(string szKeyName, bool bDefaultValue)
{
string szValue = GetConfigData(szKeyName, bDefaultValue.ToString());
try
{
return bool.Parse(szValue);
}
catch
{
return bDefaultValue;
}
} /// <summary>
/// 读取指定的配置文件中指定Key的值
/// </summary>
/// <param name="szKeyName">读取的Key名称</param>
/// <param name="szDefaultValue">指定的Key不存在时,返回的值</param>
/// <returns>Key值</returns>
public static string GetConfigData(string szKeyName, string szDefaultValue)
{
string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE);
if (!File.Exists(szConfigFile))
{
return szDefaultValue;
} XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile);
if (clsXmlDoc == null)
return szDefaultValue; string szXPath = string.Format(".//key[@name='{0}']", szKeyName);
XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath);
if (clsXmlNode == null)
{
return szDefaultValue;
} XmlNode clsValueAttr = clsXmlNode.Attributes.GetNamedItem("value");
if (clsValueAttr == null)
return szDefaultValue;
return clsValueAttr.Value;
} /// <summary>
/// 保存指定Key的值到指定的配置文件中
/// </summary>
/// <param name="szKeyName">要被修改值的Key名称</param>
/// <param name="szValue">新修改的值</param>
public static bool WriteConfigData(string szKeyName, string szValue)
{
string szConfigFile = string.Format("{0}\\{1}", GetWorkDirectory(), CONFIG_FILE);
if (!File.Exists(szConfigFile))
{
if (!CreateXmlFile(szConfigFile, "SystemConfig"))
return false;
}
XmlDocument clsXmlDoc = GetXmlDocument(szConfigFile); string szXPath = string.Format(".//key[@name='{0}']", szKeyName);
XmlNode clsXmlNode = SelectXmlNode(clsXmlDoc, szXPath);
if (clsXmlNode == null)
{
clsXmlNode = CreateXmlNode(clsXmlDoc, "key");
}
if (!SetXmlAttr(clsXmlNode, "name", szKeyName))
return false;
if (!SetXmlAttr(clsXmlNode, "value", szValue))
return false;
//
return SaveXmlDocument(clsXmlDoc, szConfigFile);
}
#endregion
}
}
窗口调用
namespace ConfigMgrTest
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
} private void btnSave_Click(object sender, EventArgs e)
{
if (this.txtUserID.Text.Trim().Equals(string.Empty))
{
MessageBox.Show("请输入用户名");
this.txtUserID.Focus();
return;
}
if (this.txtPassword.Text.Trim().Equals(string.Empty))
{
MessageBox.Show("请输入密码");
this.txtPassword.Focus();
return;
} //保存
SystemConfig.WriteConfigData("UserID", this.txtUserID.Text.Trim());
SystemConfig.WriteConfigData("Password", this.txtPassword.Text.Trim()); this.txtUserID.Text = null;
this.txtPassword.Text = null;
MessageBox.Show("成功保存到配置文件" + Application.StartupPath + "SystemConfig.xml \n点击读取按钮进行读取!");
} private void btnClose_Click(object sender, EventArgs e)
{
//读取
this.txtUserID.Text = SystemConfig.GetConfigData("UserID", string.Empty);
this.txtPassword.Text = SystemConfig.GetConfigData("Password", string.Empty);
} }
}
C# 操作XML文件,用XML文件保存信息的更多相关文章
- Qt之QDomDocument操作xml文件-模拟ini文件存储
一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...
- Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容
Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...
- 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml
数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...
- node.js 操作excel 表格与XML文件常用的npm
在日常工作中会经常用到把一些excel表格文件转化为json,xml,js等格式的文件,下面就是我在日常中用到的这些npm. 1.node-xlsx: node-xlsx可以把excel文件转化为上面 ...
- Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)
日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...
- js将xml对象,xml文件解析成xml dom对象,来对对象进行操作
由于ie与其他的浏览器对于xml文件的解析方式不同,所以有不同的解析方式 1.1 IE解析xml文件的方式 var xmlDoc=new ActiveXObject("Microsoft.X ...
- IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)
IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...
- android-pull方式解析xml文件以及XML文件的序列化
android解析XML ---------------------------基础要像磐石 在android平台上可以使用SAX.DOM和自带的Pull解析器解析xml文件,本文主要介绍使用pull ...
- web端自动化——Python读取txt文件、csv文件、xml文件
1.读取txt文件 txt文件是我们经常操作的文件类型,Python提供了以下几种读取txt文件的方式. 1)read(): 读取整个文件. 2)readline(): 读取一行数据. 3)readl ...
随机推荐
- 数字信号处理与音频处理(使用Audition)
前一阵子由于考博学习须要,看了<数字信号处理>,之前一直不清除这门课的理论在哪里应用比較广泛. 这次正巧用Audition处理了一段音频,猛然发现<数字信号处理>这门课还是很实 ...
- 结构体数组(C++)
1.定义结构体数组 和定义结构体变量类似,定义结构体数组时只需声明其为数组即可.如: struct Student{ int num; char name[20]; char sex[5]; int ...
- Caused by: java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader
1.错误描写叙述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -he ...
- 【转】coco2d-x 纹理研究
1.通常情况下用PVR格式的文件来进行图片显示的时候,在运行速度和内存消耗方面都要比PNG格式要快和小.一般情况下PVR消耗的内存比PNG消耗的内存小25%左右.PVR格式可以用ZWoptex导出.P ...
- linux atime ctime mtime
touch testtime 1. stat testtime[为文件名] 可以查看这个文件名的三者状态 2.ll testtime;ll --time=atime testtime ;ll --ti ...
- 20个Linux系统监视工具
需要监视Linux服务器的性能?试试这些内置的命令和一些附加的工具吧.大多数Linux发行版都集成了一些监视工具.这些工具可以获取有关系统活动的信息的详细指标.通过这些工具,你可以发现产生系统性能问题 ...
- Linux下如何在打开终端的时候自动配置相关环境
参考博客“Linux启动文件.设置环境变量的位置”(http://www.2cto.com/os/201305/208251.html) 在不可取的root权限的时候可以选择编辑~/.bashrc文件 ...
- ls -l命令详解
输入: ls -l 输出: -rwxr-xr-x root root May : b 第一个字段(1个字符):文件类型 - :普通文件 d:目录文件 b:块设备文件(block) c:字符设备文件(c ...
- Windows Thrift安装及HelloWorld
Thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.org 跨 ...
- redux学习笔记
中文api:http://cn.redux.js.org/docs/react-redux/troubleshooting.html 3.6 Reducer Store 收到 Action 以后,必须 ...