一个网上找到的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");
    }
}


 程序的代码在此处下载

 

posted on 2010-04-05 21:03  刑天  阅读(277)  评论(0)    收藏  举报

导航