热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> .Net编程>>正文内容

C#操作xml完整类文件

发布时间:2009年01月19日点击数: 未知
xml_oper.cs
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;
            }

        }

    }

}


xml_test.aspx.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)
    {
    }

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

}

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作