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);

        }



    }

}

 

你可能感兴趣的:(xml)