当前位置:  编程技术>.net/c#/asp.net

c#操作xml帮助类分享(xml增删改查)

    来源: 互联网  发布时间:2014-10-26

    本文导语:  代码如下:using System;using System.Collections;using System.Xml; namespace Jb51.Com.XmlDAL{public class XmlHelper{#region 公共变量XmlDocument xmldoc;XmlNode xmlnode;XmlElement xmlelem;#endregion #region 创建Xml文档/// /// 创建一个带有根节点的Xml文件/// /// Xml文件名称...

代码如下:

using System;
using System.Collections;
using System.Xml;

namespace Jb51.Com.XmlDAL
{
public class XmlHelper
{
#region 公共变量
XmlDocument xmldoc;
XmlNode xmlnode;
XmlElement xmlelem;
#endregion

#region 创建Xml文档
///
/// 创建一个带有根节点的Xml文件
///
/// Xml文件名称
/// 根节点名称
/// 编码方式:gb2312,UTF-8等常见的
/// 保存的目录路径
///
public bool CreateXmlDocument(string FileName, string RootName, string Encode)
{
try
{
xmldoc = new XmlDocument();
XmlDeclaration xmldecl;
xmldecl = xmldoc.CreateXmlDeclaration("1.0", Encode,null);
xmldoc.AppendChild(xmldecl);
xmlelem = xmldoc.CreateElement("", RootName, "");
xmldoc.AppendChild(xmlelem);
xmldoc.Save(FileName);
return true;
}
catch (Exception e)
{
return false;
throw new Exception(e.Message);
}
}

#endregion

#region 常用操作方法(增删改)
///
/// 插入一个节点和它的若干子节点
///
/// Xml文件路径
/// 插入的节点名称
/// 此节点是否具有属性,True为有,False为无
/// 此插入节点的父节点,要匹配的XPath表达式(例如:"//节点名//子节点名)
/// 此节点的属性,Key为属性名,Value为属性值
/// 子节点的属性,Key为Name,Value为InnerText
/// 返回真为更新成功,否则失败
public bool InsertNode(string XmlFile, string NewNodeName, bool HasAttributes, string fatherNode, Hashtable htAtt, Hashtable htSubNode)
{
try
{
xmldoc = new XmlDocument();
xmldoc.Load(XmlFile);
XmlNode root = xmldoc.SelectSingleNode(fatherNode);
xmlelem = xmldoc.CreateElement(NewNodeName);
if (htAtt != null && HasAttributes)//若此节点有属性,则先添加属性
{
SetAttributes(xmlelem, htAtt);
SetNodes(xmlelem.Name, xmldoc, xmlelem, htSubNode);//添加完此节点属性后,再添加它的子节点和它们的InnerText
}
else
{
SetNodes(xmlelem.Name, xmldoc, xmlelem, htSubNode);//若此节点无属性,那么直接添加它的子节点
}

root.AppendChild(xmlelem);
xmldoc.Save(XmlFile);

return true;
}
catch (Exception e)
{

throw new Exception(e.Message);

}
}
///
/// 更新节点
///
/// Xml文件路径
/// 需要更新节点的上级节点,要匹配的XPath表达式(例如:"//节点名//子节点名)
/// 需要更新的属性表,Key代表需要更新的属性,Value代表更新后的值
/// 需要更新的子节点的属性表,Key代表需要更新的子节点名字Name,Value代表更新后的值InnerText
/// 返回真为更新成功,否则失败
public bool UpdateNode(string XmlFile, string fatherNode, Hashtable htAtt, Hashtable htSubNode)
{
try
{
xmldoc = new XmlDocument();
xmldoc.Load(XmlFile);
XmlNodeList root = xmldoc.SelectSingleNode(fatherNode).ChildNodes;
UpdateNodes(root, htAtt, htSubNode);
xmldoc.Save(XmlFile);
return true;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}

///
/// 删除指定节点下的子节点
///
/// Xml文件路径
/// 制定节点,要匹配的XPath表达式(例如:"//节点名//子节点名)
/// 返回真为更新成功,否则失败
public bool DeleteNodes(string XmlFile, string fatherNode)
{
try
{
xmldoc = new XmlDocument();
xmldoc.Load(XmlFile);
xmlnode = xmldoc.SelectSingleNode(fatherNode);
xmlnode.RemoveAll();
xmldoc.Save(XmlFile);
return true;
}
catch (XmlException xe)
{
throw new XmlException(xe.Message);
}
}

///
/// 删除匹配XPath表达式的第一个节点(节点中的子元素同时会被删除)
///
/// XML文档完全文件名(包含物理路径)
/// 要匹配的XPath表达式(例如:"//节点名//子节点名
/// 成功返回true,失败返回false
public bool DeleteXmlNodeByXPath(string xmlFileName, string xpath)
{
bool isSuccess = false;
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加载XML文档
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
if (xmlNode != null)
{
//删除节点
xmldoc.ParentNode.RemoveChild(xmlNode);
}
xmldoc.Save(xmlFileName); //保存到XML文档
isSuccess = true;
}
catch (Exception ex)
{
throw ex; //这里可以定义你自己的异常处理
}
return isSuccess;
}

///
/// 删除匹配XPath表达式的第一个节点中的匹配参数xmlAttributeName的属性
///
/// XML文档完全文件名(包含物理路径)
/// 要匹配的XPath表达式(例如:"//节点名//子节点名
/// 要删除的xmlAttributeName的属性名称
/// 成功返回true,失败返回false
public bool DeleteXmlAttributeByXPath(string xmlFileName, string xpath, string xmlAttributeName)
{
bool isSuccess = false;
bool isExistsAttribute = false;
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加载XML文档
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
XmlAttribute xmlAttribute = null;
if (xmlNode != null)
{
//遍历xpath节点中的所有属性
foreach (XmlAttribute attribute in xmlNode.Attributes)
{
if (attribute.Name.ToLower() == xmlAttributeName.ToLower())
{
//节点中存在此属性
xmlAttribute = attribute;
isExistsAttribute = true;
break;
}
}
if (isExistsAttribute)
{
//删除节点中的属性
xmlNode.Attributes.Remove(xmlAttribute);
}
}
xmldoc.Save(xmlFileName); //保存到XML文档
isSuccess = true;
}
catch (Exception ex)
{
throw ex; //这里可以定义你自己的异常处理
}
return isSuccess;
}

/*柯乐义*/
///
/// 删除匹配XPath表达式的第一个节点中的所有属性
///
/// XML文档完全文件名(包含物理路径)
/// 要匹配的XPath表达式(例如:"//节点名//子节点名
/// 成功返回true,失败返回false
public bool DeleteAllXmlAttributeByXPath(string xmlFileName, string xpath)
{
bool isSuccess = false;
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加载XML文档
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
if (xmlNode != null)
{
//遍历xpath节点中的所有属性
xmlNode.Attributes.RemoveAll();
}
xmldoc.Save(xmlFileName); //保存到XML文档
isSuccess = true;
}
catch (Exception ex)
{
throw ex; //这里可以定义你自己的异常处理
}
return isSuccess;
}
#endregion

#region 私有方法
///
/// 设置节点属性
///
/// 节点所处的Element
/// 节点属性,Key代表属性名称,Value代表属性值
private void SetAttributes(XmlElement xe, Hashtable htAttribute)
{
foreach (DictionaryEntry de in htAttribute)
{
xe.SetAttribute(de.Key.ToString(), de.Value.ToString());
}
}
///
/// 增加子节点到根节点下
///
/// 上级节点名称
/// Xml文档
/// 父根节点所属的Element
/// 子节点属性,Key为Name值,Value为InnerText值
private void SetNodes(string rootNode, XmlDocument XmlDoc, XmlElement rootXe, Hashtable SubNodes)
{
if (SubNodes == null)
return;
foreach (DictionaryEntry de in SubNodes)
{
xmlnode = XmlDoc.SelectSingleNode(rootNode);
XmlElement subNode = XmlDoc.CreateElement(de.Key.ToString());
subNode.InnerText = de.Value.ToString();
rootXe.AppendChild(subNode);
}
}
///
/// 更新节点属性和子节点InnerText值。柯 乐 义
///
/// 根节点名字
/// 需要更改的属性名称和值
/// 需要更改InnerText的子节点名字和值
private void UpdateNodes(XmlNodeList root, Hashtable htAtt, Hashtable htSubNode)
{
foreach (XmlNode xn in root)
{
xmlelem = (XmlElement)xn;
if (xmlelem.HasAttributes)//如果节点如属性,则先更改它的属性
{
foreach (DictionaryEntry de in htAtt)//遍历属性哈希表
{
if (xmlelem.HasAttribute(de.Key.ToString()))//如果节点有需要更改的属性
{
xmlelem.SetAttribute(de.Key.ToString(), de.Value.ToString());//则把哈希表中相应的值Value赋给此属性Key
}
}
}
if (xmlelem.HasChildNodes)//如果有子节点,则修改其子节点的InnerText
{
XmlNodeList xnl = xmlelem.ChildNodes;
foreach (XmlNode xn1 in xnl)
{
XmlElement xe = (XmlElement)xn1;
foreach (DictionaryEntry de in htSubNode)
{
if (xe.Name == de.Key.ToString())//htSubNode中的key存储了需要更改的节点名称,
{
xe.InnerText = de.Value.ToString();//htSubNode中的Value存储了Key节点更新后的数据
}
}
}
}

}
}
#endregion
#region XML文档节点查询和读取
///
/// 选择匹配XPath表达式的第一个节点XmlNode.
///
/// XML文档完全文件名(包含物理路径)
/// 要匹配的XPath表达式(例如:"//节点名//子节点名")
/// 返回XmlNode
public XmlNode GetXmlNodeByXpath(string xmlFileName, string xpath)
{
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加载XML文档
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
return xmlNode;
}
catch (Exception ex)
{
return null;
//throw ex; //这里可以定义你自己的异常处理
}
}

///
/// 选择匹配XPath表达式的节点列表XmlNodeList.
///
/// XML文档完全文件名(包含物理路径)
/// 要匹配的XPath表达式(例如:"//节点名//子节点名")
/// 返回XmlNodeList
public XmlNodeList GetXmlNodeListByXpath(string xmlFileName, string xpath)
{
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加载XML文档
XmlNodeList xmlNodeList = xmldoc.SelectNodes(xpath);
return xmlNodeList;
}
catch (Exception ex)
{
return null;
//throw ex; //这里可以定义你自己的异常处理
}
}

///
/// 选择匹配XPath表达式的第一个节点的匹配xmlAttributeName的属性XmlAttribute. 柯乐义
///
/// XML文档完全文件名(包含物理路径)
/// 要匹配的XPath表达式(例如:"//节点名//子节点名
/// 要匹配xmlAttributeName的属性名称
/// 返回xmlAttributeName
public XmlAttribute GetXmlAttribute(string xmlFileName, string xpath, string xmlAttributeName)
{
string content = string.Empty;
xmldoc = new XmlDocument();
XmlAttribute xmlAttribute = null;
try
{
xmldoc.Load(xmlFileName); //加载XML文档
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
if (xmlNode != null)
{
if (xmlNode.Attributes.Count > 0)
{
xmlAttribute = xmlNode.Attributes[xmlAttributeName];
}
}
}
catch (Exception ex)
{
throw ex; //这里可以定义你自己的异常处理
}
return xmlAttribute;
}
#endregion
}
}

这个类怎么使用呢?下面给出一个创建xml文档的例子:

代码如下:

XmlHelper m_menu_keleyi_com = new XmlHelper();
m_menu_keleyi_com.CreateXmlDocument(@"D:kel"+"eyimenu.xml", "ke"+"leyimenu", "utf-8");

这短代码在D盘创建了一个名为keleyimenu.xml的文档,文档有根节点keleyimenu,文档的内容为:

代码如下:



 


    
 
 

您可能感兴趣的文章:

  • c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • c#的时间日期操作示例分享(c#获取当前日期)
  • java/j2ee iis7站长之家
  • C#操作txt文件,进行清空添加操作的小例子
  • C#实现装箱与拆箱操作简单实例
  • 浅谈C#互操作的内存溢出问题
  • C# 中的??操作符浅谈
  • c#剪切板操作的简单实例
  • c# 调用Surfer软件,添加引用的具体操作方法
  • c#异步task示例分享(异步操作)
  • c#下注册表操作的一个小细节
  • C#操作CLOB大对象的代码一例
  • c#判断操作系统位数实例代码
  • 一些关于c#与Sql的时间的操作
  • c#判断操作系统位数的示例分享
  • C#中的位操作小结
  • C# 操作符之三元操作符浅析
  • C# Dictionary操作范例(入门新手参考)
  • C#的WebBrowser操作frame实例解析
  • C# Winform 操作 INI 配置文件的实现代码
  • C#程序最小化到托盘图标操作步骤与实现代码
  • php中操作memcached缓存进行增删改查数据的实现代码
  • CI(CodeIgniter)框架中的增删改查操作
  • python连接mysql数据库示例(做增删改操作)
  • asp.net操作xml增删改示例分享
  • C# 对MongoDB 进行增删改查的简单操作实例
  • c#对xml增删改查操作示例
  • Android SQLite数据库增删改查操作的案例分析
  • Android SQLite数据库增删改查操作的使用详解
  • Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • TinyXML(c++下操作xml的库)介绍,下载地址及使用代码举例
  • C++的XML操作库 XSD/e
  • 请教,如何使用JDOM操作XML文档?
  • 操作xml,将xml数据显示到treeview的C#代码
  • 在Java里,有没有直接对XML文件进行操作的函数?
  • XML操作类库 XStream
  • Java的XML操作类库 JDOM
  • Linux下用C++操作XML数据库
  • linux 下如何操作xml
  • java中操作XML的问题。(急)
  • XML操作库 dom4j
  • c# xml API操作的小例子
  • python通过ElementTree操作XML获取结点读取属性美化XML
  • java里面那些类(包)是负责对XML操作的,谁能给我讲解一下,或者指点在那里能找到相关资料?最好给一个例子。
  • 操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)
  • C#读写xml配置文件(LINQ操作实例)
  • PHP操作HTML/XML的类库 QueryPath
  • C#通过XML节点属性/属性值读取写入XML操作代码实例
  • python目录操作之python遍历文件夹后将结果存储为xml
  • asp.net xml文件的读写、添加、修改、删除操作示例
  • php操作XML、读取数据和写入数据的实现代码
  • C++ Stacks(堆栈) 成员 操作:比较和分配堆栈
  • 谁有操作系统PV操作的例子???谁有操作系统PV操作的例子???谢谢!!
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 已安装了Windows操作系统,还想安装Linux。却还想在开机选择操作系统时由Windows引导,请问如何操作。在线等待
  • C++ I/O 成员 flags():操作flags
  • 请问LINUX操作系统是怎样对外围设备进行操作的
  • C++ I/O 成员 width():操作域宽度
  • 什么样的操作最耗费服务器的IO操作?
  • Xcode介绍及创建工程和工程依赖操作步骤
  • 无操作系统下对U盘的操作


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3