XML 增删查改

本文介绍了一个.NET应用程序中如何使用C#来实现对XML文件的基本操作,包括添加、删除和编辑节点。通过具体的代码示例展示了如何定位到特定节点并进行修改。

直接贴代码

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Xml;

namespace Myshop.MyShop
{
    
public class XMLEditor
    {
        
/// <summary>
        
/// 删除节点
        
/// </summary>
        
/// <param name="xmlPath"></param>
        
/// <param name="id"></param>
        
/// <returns></returns>
        public static bool DeleteNode(string xmlPath, string id)
        {
            XmlDocument xml 
= new XmlDocument();            //新建xml文档
            xml.Load(xmlPath);                              //载入文件
            XmlNode root = xml.SelectSingleNode("root");    //获取根节点    
            XmlNode doc = null;                             //定义节点
            GetXmlDoc(root, id, ref doc);                   //获取要处理的节点
            if (doc != null)
            {
                doc.ParentNode.RemoveChild(doc);            
//删除自己
                xml.Save(xmlPath);                          //保存
                return true;
            }
            
else
                
return false;
        }

        
/// <summary>
        
/// 添加新节点
        
/// </summary>
        
/// <param name="xmlPath"></param>
        
/// <param name="level"></param>
        
/// <param name="fatherid"></param>
        
/// <param name="name"></param>
        
/// <returns></returns>
        public static bool AddNode(string xmlPath, string level, string fatherid, string name)
        {
            XmlDocument xml 
= new XmlDocument();
            xml.Load(xmlPath);
            XmlNode root 
= xml.SelectSingleNode("root");
            XmlElement element 
= xml.CreateElement("type");         //新建节点
            element.SetAttribute("name", name);                     //添加标签
            element.SetAttribute("level", level);                   
            element.SetAttribute(
"fatherid", fatherid);
            XmlNode doc 
= null;
            GetXmlDoc(root, fatherid,
ref doc);
            
if (doc != null)
            {
                doc.AppendChild(element 
as XmlNode);                //添加child
                xml.Save(xmlPath);
                
return true;
            }
            
else
                
return false;            
        }

        
/// <summary>
        
/// 编辑节点
        
/// </summary>
        
/// <param name="xmlPath"></param>
        
/// <param name="id"></param>
        
/// <param name="level"></param>
        
/// <param name="fatherid"></param>
        
/// <param name="name"></param>
        
/// <returns></returns>
        public static bool EditNode(string xmlPath, string id, string level, string fatherid, string name)
        {
            XmlDocument xml 
= new XmlDocument();
            xml.Load(xmlPath);
            XmlNode root 
= xml.SelectSingleNode("root");
            XmlNode doc
=null;
            GetXmlDoc(root, fatherid,
ref doc);
            
if (doc != null)
            {
                XmlElement element 
= doc as XmlElement;             //XmlNode转XmlElement更新
                element.SetAttribute("id", id);
                element.SetAttribute(
"name", name);
                element.SetAttribute(
"level", level);
                element.SetAttribute(
"fatherid", fatherid);
                xml.Save(xmlPath);
                
return true;
            }
            
else
                
return false;
        }

        
/// <summary>
        
/// 递归查找节点
        
/// </summary>
        
/// <param name="node">起始节点</param>
        
/// <param name="id">attr</param>
        private static void GetXmlDoc(XmlNode node,string id,ref XmlNode myNode)
        {
            
foreach (XmlNode xml in node.ChildNodes)
            {
                
if (xml.Attributes["id"].Value == id)
                    myNode 
= xml;
                
else
                    GetXmlDoc(xml, id, 
ref myNode);
            }
        }
    }
}
ContractedBlock.gifExpandedBlockStart.gifCode
<!--XML文件-->
<root>
  
<type id="1" name="aa" level="1" fatherid="0">
    
<type id="2" name="bb" level="2" fatherid="1">
    
</type>
    
<type id="4" name="ccc" level="2" fatherid="1" />
    
<type id="9" name="sss" level="2" fatherid="1" />
  
</type>
  
<type id="3" name="cc" level="1" fatherid="0">
  
</type>
</root>

转载于:https://www.cnblogs.com/jimmypony/archive/2008/09/02/1282119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值