zoukankan      html  css  js  c++  java
  • 一个网上找到的xml操作类

        经常需要在项目中使用XML,今天找到一个XML的操作类,立刻备份到我的博客中。

    代码
    using System;
    using System.Data;
    using System.Web;
    using System.Xml;

    /// <summary>
    /// 类名:xml操作类
    /// 作者:虫
    /// 时间:2008.8.31
    /// </summary>
    public class xml_oper
    {
        
    private XmlDocument xmlDoc; 
        
    public xml_oper()
        {

        }

        
    /// <summary>
        
    /// 加载xml文件
        
    /// </summary>
        
    /// <param name="path">xml文件的物理路径</param>
        private void LoadXml(string path, string node_root)
        {
            xmlDoc 
    = new XmlDocument();
            
    //判断xml文件是否存在
            if (!System.IO.File.Exists(path))
            {
                
    //创建xml 声明节点
                XmlNode xmlnode = xmlDoc.CreateNode(System.Xml.XmlNodeType.XmlDeclaration, """");
                
    //添加上述创建和 xml声明节点
                xmlDoc.AppendChild(xmlnode);
                
    //创建xml dbGuest 元素(根节点)
                XmlElement xmlelem = xmlDoc.CreateElement("", node_root, "");
                xmlDoc.AppendChild(xmlelem);
                
    try
                {
                    xmlDoc.Save(path);
                }
                
    catch (Exception ex)
                {
                    
    throw ex;
                }
                xmlDoc.Load(path);
            }
            
    else
            {
                
    //加载xml文件
                xmlDoc.Load(path);
            }
        }

        
    /// <summary>
        
    /// 添加xml子节点
        
    /// </summary>
        
    /// <param name="path">xml文件的物理路径</param>
        
    /// <param name="node_root">根节点名称</param>
        
    /// <param name="node_name">添加的子节点名称</param>
        
    /// <param name="node_text">子节点文本</param>
        public void addElement(string path, string node_root, string node_name, string node_text,string att_name,string att_value)
        {
            LoadXml(path, node_root);

            XmlNodeList nodeList 
    = xmlDoc.SelectSingleNode(node_root).ChildNodes;//获取bookstore节点的所有子节点
            
    //判断是否有节点,有节点就遍历所有子节点,看看有没有重复节点,没节点就添加一个新节点
            if (nodeList.Count > 0)
            {
                
    foreach (XmlNode xn in nodeList)//遍历所有子节点 
                {
                    XmlElement xe 
    = (XmlElement)xn;//将子节点类型转换为XmlElement类型 
                    if (xe.GetAttribute(att_name) != att_value)
                    {
                        XmlNode xmldocSelect 
    = xmlDoc.SelectSingleNode(node_root);   //选中根节点
                        XmlElement son_node = xmlDoc.CreateElement(node_name);    //添加子节点 
                        son_node.SetAttribute(att_name, att_value);     //设置属性
                        son_node.InnerText = node_text;    //添加节点文本
                        xmldocSelect.AppendChild(son_node);       //添加子节点
                        xmlDoc.Save(path);          //保存xml文件
                        break;
                    }
                }

            }
            
    else 
            {
                XmlNode xmldocSelect 
    = xmlDoc.SelectSingleNode(node_root);   //选中根节点
                XmlElement son_node = xmlDoc.CreateElement(node_name);    //添加子节点 
                son_node.SetAttribute(att_name, att_value);     //设置属性
                son_node.InnerText = node_text;    //添加节点文本
                xmldocSelect.AppendChild(son_node);       //添加子节点
                xmlDoc.Save(path);          //保存xml文件
            }
        }

        
    /// <summary>
        
    /// 修改节点的内容
        
    /// </summary>
        
    /// <param name="path">xml文件的物理路径</param>
        
    /// <param name="node_root">根节点名称</param>
        
    /// <param name="new_text">节点的新内容</param>
        
    /// <param name="att_name">节点的属性名</param>
        
    /// <param name="att_value">节点的属性值</param>
        public void UpdateElement(string path, string node_root, string new_text, string att_name, string att_value)
        {
            LoadXml(path, node_root);
            XmlNodeList nodeList 
    = xmlDoc.SelectSingleNode(node_root).ChildNodes;//获取bookstore节点的所有子节点 
            foreach (XmlNode xn in nodeList)//遍历所有子节点 
            {
                XmlElement xe 
    = (XmlElement)xn;//将子节点类型转换为XmlElement类型 
                if (xe.GetAttribute(att_name) == att_value)
                {
                    xe.InnerText 
    = new_text;    //内容赋值
                    xmlDoc.Save(path);//保存 
                    break;
                }
            }
            
        }

        
    /// <summary>
        
    /// 删除节点
        
    /// </summary>
        
    /// <param name="path">xml文件的物理路径</param>
        
    /// <param name="node_root">根节点名称</param>
        
    /// <param name="att_name">节点的属性名</param>
        
    /// <param name="att_value">节点的属性值</param>
        public void deleteNode(string path, string node_root, string att_name, string att_value)
        {

            LoadXml(path, node_root);

            XmlNodeList nodeList 
    = xmlDoc.SelectSingleNode(node_root).ChildNodes;
            XmlNode root 
    = xmlDoc.SelectSingleNode(node_root);

            
    foreach (XmlNode xn in nodeList)
            {
                XmlElement xe 
    = (XmlElement)xn;

                
    if (xe.GetAttribute(att_name) == att_value)
                {
                    
    //xe.RemoveAttribute("name");//删除name属性 
                    xe.RemoveAll();//删除该节点的全部内容 
                    root.RemoveChild(xe);
                    xmlDoc.Save(path);
    //保存 
                    break;
                }

            }
        }
    }

    CS文件中代码如下:

    代码
    using System;
    using System.Data;
    using System.Web;
    using System.Xml; 

    public partial class xml_test : System.Web.UI.Page
    {
        xml_oper xml 
    = new xml_oper();
        
    protected void Page_Load(object sender, EventArgs e)
        {
            
            
    //xml.addElement(Server.MapPath("bb.xml"), "worm", "测试2", "这里是第二个添加的子节点","name","ddd");
            
    //xml.UpdateElement(Server.MapPath("aaa.xml"), "worm", "修改后", "name", "one");
            
    //xml.deleteNode(Server.MapPath("aaa.xml"), "worm", "name", "two");
        }

        
    protected void add_Click(object sender, EventArgs e)
        {
            xml.addElement(Server.MapPath(
    "test.xml"), "worm""测试1""这里是第一个添加的子节点""name""one");
            Response.Write(
    "添加了第一个节点,请查看xml");
        }
        
    protected void add_Click2(object sender, EventArgs e)
        {
            xml.addElement(Server.MapPath(
    "test.xml"), "worm""测试2""这里是第二个添加的子节点""name""two");
            Response.Write(
    "添加了第二个节点,请查看xml");
        }
        
    protected void change(object sender, EventArgs e)
        {
            xml.UpdateElement(Server.MapPath(
    "test.xml"), "worm""修改后的第一个节点内容""name""one");
            Response.Write(
    "修改了第一个节点,请查看xml");
        }

        
    protected void del_Click(object sender, EventArgs e)
        {
            xml.deleteNode(Server.MapPath(
    "test.xml"), "worm""name""two");
            Response.Write(
    "删除了第二个节点,请查看xml");
        }
    }


     程序的代码在此处下载

  • 相关阅读:
    终端设备 tty,pty,pts 概念与文件描述符的联系
    Nginx – access_log格式及配置
    Nginx – rewrite 配置 URL重写及301跳转原理图
    nginx命令启动及选项
    nginx-web身份验证
    nginx_server_location对客户资源的辨别规则
    利用Session防止表单重复提交
    归并排序
    Cookie/Session的机制与安全
    HTTP Cookie Session
  • 原文地址:https://www.cnblogs.com/jinqi79731/p/1704891.html
Copyright © 2011-2022 走看看