实现操作xml文件的类

/*
 * Created by SharpDevelop.
 * User: XiaoCai
 * Date: 2006-9-25
 * Time: 10:05
 * 
 * If you have anything,Please contact us;
 
*/

 
using  System;
using  System.Xml;

namespace  BH.XmlClass
{
    
基本的XML数据对象类
    
    
///    <summary>
    
/// 数据操作类,只能对简单的xml数据表结构操作
    
/// XML文件原型:1、只有一个根结点。2、根结点可以带属性。
    
///     3、子结点标识必须相同。4、子结点和孙结点都不带属性
    
/// </summary>

    public class XmlOprator
    
{
        
/// <summary>
        
/// 添加一个新的XML结点
        
/// </summary>
        
/// <param name="vXmlItem">结点信息对象</param>

        public void AddXml(XmlItem vXmlItem)
        
{
            XmlDocument XmlDoc 
= new XmlDocument();
            XmlDoc.Load(vXmlItem.XmlPath);
            
//
            
//TODO:查找根结点
            
//
            XmlNode root = XmlDoc.SelectSingleNode(vXmlItem.RootNode);
            
if(vXmlItem.IsRootAttribute){
                
//添加根结点属性
                XmlElement xe = (XmlElement)root;
                
for(int i=0;i < vXmlItem.RootAttribute.Length;i++){
                    xe.SetAttribute(vXmlItem.RootAttribute[i], vXmlItem.RootAttributeValue[i]);
                }

                
//xe.SetAttribute("Date",vXmlItem.Date);
                
//xe.SetAttribute("Author",vXmlItem.Author);
                
//xe.SetAttribute("Description",vXmlItem.Description);
            }

            
else
            
{
                
//添加根结点的子结点
                XmlElement xe = XmlDoc.CreateElement(vXmlItem.ChildNode);
                
                
for(int i=0;i < vXmlItem.GrandsonNode.Length;i++){
                    XmlElement xeSub1 
= XmlDoc.CreateElement(vXmlItem.GrandsonNode[i]);
                    xeSub1.InnerText 
= vXmlItem.GrandsonNodeValue[i];
                    xe.AppendChild(xeSub1);
                }

                
                
/*//xe的第一个子结点
                XmlElement xeSub1 = XmlDoc.CreateElement("Name");
                xeSub1.InnerText = vXmlItem.Name;
                xe.AppendChild(xeSub1);
                //xe的第二个子结点
                XmlElement xeSub2 = XmlDoc.CreateElement("Url");
                xeSub2.InnerText = vXmlItem.Url;
                xe.AppendChild(xeSub2);
                //xe的第三个子结点
                XmlElement xeSub3 = XmlDoc.CreateElement("Img");
                xeSub3.InnerText = vXmlItem.Img;
                xe.AppendChild(xeSub3);
                //xe的第四个子结点
                XmlElement xeSub4 = XmlDoc.CreateElement("Address");
                xeSub4.InnerText = vXmlItem.Address;
                xe.AppendChild(xeSub4);
*/

                    
                root.AppendChild(xe);
                XmlDoc.Save(vXmlItem.XmlPath);
            }

        }

        
        
/// <summary>
        
/// 编辑结点信息
        
/// </summary>
        
/// <param name="vXmlItem">要修改的结点信息对象</param>
        
/// <param name="Index">孙结点的索引</param>
        
/// <param name="WhereStr">和索引对应的条件</param>

        public void EditXml(XmlItem vXmlItem,int Index,string WhereStr)
        
{
            XmlDocument XmlDoc 
= new XmlDocument();
            XmlDoc.Load(vXmlItem.XmlPath);
            
            XmlNodeList xnl 
= XmlDoc.SelectSingleNode(vXmlItem.RootNode).ChildNodes;
            
foreach(XmlNode xn in xnl){
                XmlElement xe 
= (XmlElement)xn;
                
if(xe.ChildNodes[Index].InnerText==WhereStr){
                    
for(int i=0;i < vXmlItem.GrandsonNode.Length;i++){
                        xe.ChildNodes[i].InnerText 
= vXmlItem.GrandsonNodeValue[i];
                    }

                    
/*xe.ChildNodes[0].InnerText = vXmlItem.Name;
                    xe.ChildNodes[1].InnerText = vXmlItem.Url;
                    xe.ChildNodes[2].InnerText = vXmlItem.Img;
                    xe.ChildNodes[3].InnerText = vXmlItem.Address;
*/

                }

            }

            XmlDoc.Save(vXmlItem.XmlPath);
        }

        
        
/// <summary>
        
/// 删除XML指定结点,孙结点的索引作为条件
        
/// </summary>
        
/// <param name="vXmlItem">结点信息对象</param>
        
/// <param name="Index">孙结点的索引</param>
        
/// <param name="WhereStr">和索引对应的条件</param>

        public void DeleteXml(XmlItem vXmlItem,int Index,string WhereStr)
        
{
            XmlDocument XmlDoc 
= new XmlDocument();
            XmlDoc.Load(vXmlItem.XmlPath);
            
            XmlNodeList xnl 
= XmlDoc.SelectSingleNode(vXmlItem.RootNode).ChildNodes;
            
//按照孙结点的索引循环查找指定结点删除
            foreach(XmlNode xn in xnl){
                XmlElement xe 
= (XmlElement)xn;
                
if(xe.ChildNodes[Index].InnerText==WhereStr){
                    XmlDoc.SelectSingleNode(vXmlItem.RootNode).RemoveChild(xe);
                }

            }

            XmlDoc.Save(vXmlItem.XmlPath);
        }

        
        
public void DeleteXml(XmlItem vXI,string vGrandsonNode,string WhereStr){
            XmlDocument XmlDoc 
= new XmlDocument();
            XmlDoc.Load(vXI.XmlPath);
            
            XmlNodeList xnl 
= XmlDoc.SelectSingleNode(vXI.RootNode).ChildNodes;
            
//按照孙结点的名称循环查找指定结点删除
            foreach(XmlNode xn in xnl){
                XmlElement xe 
= (XmlElement)xn;
                
if(xe.GetElementsByTagName(vGrandsonNode)[0].InnerText==WhereStr){
                    XmlDoc.SelectSingleNode(vXI.RootNode).RemoveChild(xe);
                }

            }

            XmlDoc.Save(vXI.XmlPath);
        }

    }

}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值