栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#实现的xml操作类完整实例

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#实现的xml操作类完整实例

本文实例讲述了C#实现的xml操作类,分享给大家供大家参考,具体如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Xml;
using System.Text;
namespace MSCL
{
  /// 
  /// XML 操作基类
  /// 
  public class XmlHelper : IDisposable
  {
    //以下为单一功能的静态类
    #region 读取XML到DataSet
    
    /// 
    /// 功能:读取XML到DataSet中
    /// 
    /// xml路径
    /// DataSet
    public static DataSet GetXml(string XmlPath)
    {
      DataSet ds = new DataSet();
      ds.ReadXml(@XmlPath);
      return ds;
    }
    #endregion
    #region 读取xml文档并返回一个节点
    
    /// 
    /// 读取xml文档并返回一个节点:适用于一级节点
    /// 
    /// xml路径
    /// 节点
    /// 
    public static string ReadXmlReturnNode(string XmlPath, string Node)
    {
      Xmldocument docXml = new Xmldocument();
      docXml.Load(@XmlPath);
      XmlNodeList xn = docXml.GetElementsByTagName(Node);
      return xn.Item(0).InnerText.ToString();
    }
    #endregion
    #region 查找数据,返回一个DataSet
    
    /// 
    /// 查找数据,返回当前节点的所有下级节点,填充到一个DataSet中
    /// 
    /// xml文档路径
    /// 节点的路径:根节点/父节点/当前节点
    /// 
    public static DataSet GetXmlData(string xmlPath, string XmlPathNode)
    {
      Xmldocument objXmlDoc = new Xmldocument();
      objXmlDoc.Load(xmlPath);
      DataSet ds = new DataSet();
      StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
      ds.ReadXml(read);
      return ds;
    }
    #endregion
    #region 更新Xml节点内容
    
    /// 
    /// 更新Xml节点内容
    /// 
    /// xml路径
    /// 要更换内容的节点:节点路径 根节点/父节点/当前节点
    /// 新的内容
    public static void XmlNodeReplace(string xmlPath, string Node, string Content)
    {
      Xmldocument objXmlDoc = new Xmldocument();
      objXmlDoc.Load(xmlPath);
      objXmlDoc.SelectSingleNode(Node).InnerText = Content;
      objXmlDoc.Save(xmlPath);
    }
    #endregion
    #region 删除XML节点和此节点下的子节点
    
    /// 
    /// 删除XML节点和此节点下的子节点
    /// 
    /// xml文档路径
    /// 节点路径
    public static void XmlNodeDelete(string xmlPath, string Node)
    {
      Xmldocument objXmlDoc = new Xmldocument();
      objXmlDoc.Load(xmlPath);
      string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
      objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
      objXmlDoc.Save(xmlPath);
    }
    #endregion
    #region 插入一个节点和此节点的子节点
    
    /// 
    /// 插入一个节点和此节点的子节点
    /// 
    /// xml路径
    /// 当前节点路径
    /// 新插入节点
    /// 插入节点的子节点
    /// 子节点的内容,已经应用CDATA
    public static void XmlInsertNode(string xmlPath, string MailNode, string ChildNode, string Element, string Content)
    {
      Xmldocument objXmlDoc = new Xmldocument();
      objXmlDoc.Load(xmlPath);
      XmlNode objRootNode = objXmlDoc.SelectSingleNode(MailNode);
      XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
      objRootNode.AppendChild(objChildNode);
      XmlElement objElement = objXmlDoc.CreateElement(Element);
      XmlCDataSection xcds = objXmlDoc.CreateCDataSection(Content);
      objElement.AppendChild(xcds);
      objChildNode.AppendChild(objElement);
      objXmlDoc.Save(xmlPath);
    }
    #endregion
    #region 插入一节点,带一属性
    
    /// 
    /// 插入一节点,带一属性
    /// 
    /// Xml文档路径
    /// 当前节点路径
    /// 新节点
    /// 属性名称
    /// 属性值
    /// 新节点值
    public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content)
    {
      Xmldocument objXmlDoc = new Xmldocument();
      objXmlDoc.Load(xmlPath);
      XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
      XmlElement objElement = objXmlDoc.CreateElement(Element);
      objElement.SetAttribute(Attrib, AttribContent);
      objElement.InnerText = Content;
      objNode.AppendChild(objElement);
      objXmlDoc.Save(xmlPath);
    }
    #endregion
    #region 插入一节点不带属性
    
    public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Content)
    {
      Xmldocument objXmlDoc = new Xmldocument();
      objXmlDoc.Load(xmlPath);
      XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
      XmlElement objElement = objXmlDoc.CreateElement(Element);
      objElement.InnerText = Content;
      objNode.AppendChild(objElement);
      objXmlDoc.Save(xmlPath);
    }
    #endregion
    //必须创建对象才能使用的类
    private bool _alreadyDispose = false;
    private Xmldocument xmlDoc = new Xmldocument();
    private XmlNode xmlNode;
    private XmlElement xmlElem;
    #region 构造与释构
    public XmlHelper()
    {
    }
    ~XmlHelper()
    {
      Dispose();
    }
    protected virtual void Dispose(bool isDisposing)
    {
      if (_alreadyDispose) return;
      if (isDisposing)
      {
 //
      }
      _alreadyDispose = true;
    }
    #endregion
    #region IDisposable 成员
    public void Dispose()
    {
      Dispose(true);
      GC.SuppressFinalize(this);
    }
    #endregion
    #region 创建xml文档
    
    #region 创建一个只有声明和根节点的XML文档
    /// 
    /// 创建一个只有声明和根节点的XML文档
    /// 
    /// 
    public void CreateXmlRoot(string root)
    {
      //加入XML的声明段落
      xmlNode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
      xmlDoc.AppendChild(xmlNode);
      //加入一个根元素
      xmlElem = xmlDoc.CreateElement("", root, "");
      xmlDoc.AppendChild(xmlElem);
    }
    #endregion
    #region 在当前节点下插入一个空节点节点
    /// 
    /// 在当前节点下插入一个空节点节点
    /// 
    /// 当前节点路径
    /// 节点名称
    public void CreatXmlNode(string mainNode, string node)
    {
      XmlNode MainNode = xmlDoc.SelectSingleNode(mainNode);
      XmlElement objElem = xmlDoc.CreateElement(node);
      MainNode.AppendChild(objElem);
    }
    #endregion
    #region 在当前节点插入一个仅带值的节点
    /// 
    /// 在当前节点插入一个仅带值的节点
    /// 
    /// 当前节点
    /// 新节点
    /// 新节点值
    public void CreatXmlNode(string mainNode, string node, string content)
    {
      XmlNode MainNode = xmlDoc.SelectSingleNode(mainNode);
      XmlElement objElem = xmlDoc.CreateElement(node);
      objElem.InnerText = content;
      MainNode.AppendChild(objElem);
    }
    #endregion
    #region 在当前节点的插入一个仅带属性值的节点
    /// 
    /// 在当前节点的插入一个仅带属性值的节点
    /// 
    /// 当前节点或路径
    /// 新节点
    /// 新节点属性名称
    /// 新节点属性值
    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue)
    {
      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);
      XmlElement objElem = xmlDoc.CreateElement(Node);
      objElem.SetAttribute(Attrib, AttribValue);
      mainNode.AppendChild(objElem);
    }
    #endregion
    #region 创建一个带属性值的节点值的节点
    /// 
    /// 创建一个带属性值的节点值的节点
    /// 
    /// 当前节点或路径
    /// 节点名称
    /// 属性名称
    /// 属性值
    /// 节点传情
    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue, string Content)
    {
      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);
      XmlElement objElem = xmlDoc.CreateElement(Node);
      objElem.SetAttribute(Attrib, AttribValue);
      objElem.InnerText = Content;
      mainNode.AppendChild(objElem);
    }
    #endregion
    #region 在当前节点的插入一个仅带2个属性值的节点
    /// 
    /// 在当前节点的插入一个仅带2个属性值的节点
    /// 
    /// 当前节点或路径
    /// 节点名称
    /// 属性名称一
    /// 属性值一
    /// 属性名称二
    /// 属性值二
    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue, string Attrib2, string AttribValue2)
    {
      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);
      XmlElement objElem = xmlDoc.CreateElement(Node);
      objElem.SetAttribute(Attrib, AttribValue);
      objElem.SetAttribute(Attrib2, AttribValue2);
      mainNode.AppendChild(objElem);
    }
    #endregion
    #region 在当前节点插入带两个属性的节点
    /// 
    /// 在当前节点插入带两个属性的节点
    /// 
    /// 当前节点或路径
    /// 节点名称
    /// 属性名称一
    /// 属性值一
    /// 属性名称二
    /// 属性值二
    /// 节点值
    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue, string Attrib2, string AttribValue2, string Content)
    {
      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);
      XmlElement objElem = xmlDoc.CreateElement(Node);
      objElem.SetAttribute(Attrib, AttribValue);
      objElem.SetAttribute(Attrib2, AttribValue2);
      objElem.InnerText = Content;
      mainNode.AppendChild(objElem);
    }
    #endregion
    #region 保存Xml
    /// 
    /// 保存Xml
    /// 
    /// 保存的当前路径
    public void XmlSave(string path)
    {
      xmlDoc.Save(path);
    }
    #endregion
    #endregion
    #region 根据父节点属性值读取子节点值
    
    /// 
    /// 根据父节点属性读取字节点值
    /// 
    /// xml路径
    /// 父节点名
    /// 属性值
    /// 属性索引
    /// 要返回的节点数组长度
    /// 
    public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElenetName, string AttributeName, int AttributeIndex, int ArrayLength)
    {
      System.Collections.ArrayList al = new System.Collections.ArrayList();
      Xmldocument docXml = new Xmldocument();
      docXml.Load(@XmlPath);
      XmlNodeList xn = docXml.documentElement.ChildNodes;
      //遍历第一层节点
      foreach (XmlElement element in xn)
      {
 //判断父节点是否为指定节点
 if (element.Name == FatherElenetName)
 {
   //判断父节点属性的索引是否大于指定索引
   if (element.Attributes.Count < AttributeIndex)
     return null;
   //判断父节点的属性值是否等于指定属性
   if (element.Attributes[AttributeIndex].Value == AttributeName)
   {
     XmlNodeList xx = element.ChildNodes;
     if (xx.Count > 0)
     {
for (int i = 0; i < ArrayLength & i < xx.Count; i++)
{
  al.Add(xx[i].InnerText);
}
     }
   }
 }
      }
      return al;
    }
    #endregion
    #region 根据节点属性读取子节点值(较省资源模式)
    
    /// 
    /// 根据节点属性读取子节点值(较省资源模式)
    /// 
    /// xml路径
    /// 父节点值
    /// 属性名称
    /// 属性值
    /// 返回的数组长度
    /// 
    public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string Attributevalue, int ArrayLength)
    {
      System.Collections.ArrayList al = new System.Collections.ArrayList();
      Xmldocument docXml = new Xmldocument();
      docXml.Load(@XmlPath);
      XmlNodeList xn;
      xn = docXml.documentElement.SelectNodes("//" + FatherElement + "[" + @AttributeName + "='" + Attributevalue + "']");
      XmlNodeList xx = xn.Item(0).ChildNodes;
      for (int i = 0; i < ArrayLength & i < xx.Count; i++)
      {
 al.Add(xx.Item(i).InnerText);
      }
      return al;
    }
    #endregion
  }
}

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#程序设计之线程使用技巧总结》、《C#操作Excel技巧总结》、《C#中XML文件操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#数组操作技巧总结》及《C#面向对象程序设计入门教程》

希望本文所述对大家C#程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/124157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号