using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Configuration;
namespace CommonClass
{
/// <summary>
/// 操作xml(文件创建,节点新增,修改,删除)
/// </summary>
public class XmlOperate:IDisposable
{
#region 公共变量
string _mFile;
static XmlDocument _mXml;
private bool disposed = false;
#endregion
#region 构造函数(初始化xml文件地址)
/// <summary>
/// 操作xml(文件创建,节点新增,修改,删除)
/// </summary>
/// <param name="pFileName">文件名称:xxx.xml</param>
public XmlOperate(string pFileName)
{
_mFile = AppDomain.CurrentDomain.BaseDirectory + pFileName;
_mXml = new XmlDocument();
if (File.Exists(_mFile))
{
_mXml.Load(_mFile);
}
else
{
XmlNode _xmlnode = _mXml.CreateXmlDeclaration("1.0", "utf-8", null);
_mXml.AppendChild(_xmlnode);
XmlElement _root = _mXml.CreateElement("root");
_mXml.AppendChild(_root);
_mXml.Save(_mFile);
}
}
#endregion
#region 方法
/// <summary>
/// 根据传入的key,和value 新增节点
/// </summary>
/// <param name="pKey">新增的key</param>
/// <param name="pValue">值</param>
public XmlNode CreateNode(string pKey,string pValue)
{
if (_mXml == null || string.IsNullOrEmpty(pKey)) return null;
//判断节点是否存在
XmlNode _node = _mXml.SelectSingleNode("/root/"+ pKey);
if (_node == null)
{
XmlNode _root = _mXml.DocumentElement;
XmlElement _element = _mXml.CreateElement(pKey);
_element.InnerText = pValue;
_root.AppendChild(_element);
_mXml.Save(_mFile);
return _element;
}
else
{
return null;
}
}
/// <summary>
/// 根据传入的key,和value 修改节点
/// </summary>
/// <param name="pKey">要修改的key</param>
/// <param name="pValue">更新值</param>
public XmlNode UpdateNode(string pKey, string pValue)
{
if (_mXml == null || string.IsNullOrEmpty(pKey)) return null;
//判断节点是否存在
XmlNode _node = _mXml.SelectSingleNode("/root/" + pKey);
if (_node == null)
{
return null;
}
else
{
XmlElement _element = (XmlElement)_node;
_element.InnerText = pValue;
_mXml.Save(_mFile);
return _element;
}
}
/// <summary>
/// 根据传入的key 删除节点
/// </summary>
/// <param name="pKey">要删除的key</param>
public bool DeleteNode(string pKey)
{
if (_mXml == null || string.IsNullOrEmpty(pKey)) return false;
//判断节点是否存在
XmlNode _node = _mXml.SelectSingleNode("/root/" + pKey);
if (_node != null)
{
XmlElement _element = (XmlElement)_node;
_element.ParentNode.RemoveChild(_element);
_mXml.Save(_mFile);
}
return true;
}
/// <summary>
/// 根据条件,得到一个相应的值
/// </summary>
/// <param name="pKey">要查找的key</param>
/// <returns></returns>
public string GetValueByKey(string pKey)
{
if (_mXml == null || string.IsNullOrEmpty(pKey)) return "";
StringBuilder _strFilter = new StringBuilder();
_strFilter.AppendFormat("/root/{0}", pKey);
XmlNode _node = _mXml.SelectSingleNode(_strFilter.ToString());
if (_node != null)
{
return _node.InnerText;
}
else
{
return "";
}
}
#endregion
#region 释放资源
//供程序员显式调用的Dispose方法
public void Dispose()
{
//调用带参数的Dispose方法,释放托管和非托管资源
Dispose(true);
//手动调用了Dispose释放资源,那么析构函数就是不必要的了,这里阻止GC调用析构函数
System.GC.SuppressFinalize(this);
}
//protected的Dispose方法,保证不会被外部调用。
//传入bool值disposing以确定是否释放托管资源
protected virtual void Dispose(bool disposing)
{
if (disposed)
{
return;
}
if (_mXml != null)
{
_mXml = null;
}
//让类型知道自己已经被释放
disposed = true;
}
//供GC调用的析构函数
~XmlOperate()
{
Dispose(false);//释放非托管资源
}
#endregion
}
}
C# 生成xml文件,新增,修改,删除节点
最新推荐文章于 2023-05-15 14:30:00 发布