对XML的各种操作

/**//* *********************************************************************************
 * 
 * 功能说明:XML处理基类
 * 作者: 刘功勋;
 * 版本:V0.1(C#2.0);时间:2006-12-13
 * 
 * ---------修改:hya   时间:2007-8-20
 * ******************************************************************************
*/

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.IO;
using  System.Xml;
using  System.Text;


   
/**/ ///   <summary>
    
///  XML 操作基类
    
///   </summary>
     public   class  XmlHelper : IDisposable
    {




        
// 以下为单一功能的静态类

        读取XML到DataSet
#region  读取XML到DataSet
        
/**/ ///   <summary>
        
///  功能:读取XML到DataSet中
        
///   </summary>
        
///   <param name="XmlPath"> xml路径 </param>
        
///   <returns> DataSet </returns>
         public   static  DataSet GetXml( string  XmlPath)
        {
            DataSet ds 
=   new  DataSet();
            ds.ReadXml(@XmlPath);
            
return  ds;
        }
        
#endregion

        读取xml文档并返回一个节点
#region  读取xml文档并返回一个节点
        
/**/ ///   <summary>
        
///  读取xml文档并返回一个节点:适用于一级节点
        
///   </summary>
        
///   <param name="XmlPath"> xml路径 </param>
        
///   <param name="NodeName"> 节点 </param>
        
///   <returns></returns>
         public   static   string  ReadXmlReturnNode( string  XmlPath,  string  Node)
        {
            XmlDocument docXml 
=   new  XmlDocument();
            docXml.Load(@XmlPath);
            XmlNodeList xn 
=  docXml.GetElementsByTagName(Node);
            
return  xn.Item( 0 ).InnerText.ToString();
        }
        
#endregion

        查找数据,返回一个DataSet
#region  查找数据,返回一个DataSet
        
/**/ ///   <summary>
        
///  查找数据,返回当前节点的所有下级节点,填充到一个DataSet中
        
///   </summary>
        
///   <param name="xmlPath"> xml文档路径 </param>
        
///   <param name="XmlPathNode"> 节点的路径:根节点/父节点/当前节点 </param>
        
///   <returns></returns>
         public   static  DataSet GetXmlData( string  xmlPath,  string  XmlPathNode)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            DataSet ds 
=   new  DataSet();
            StringReader read 
=   new  StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
            ds.ReadXml(read);
            
return  ds;
        }


        
#endregion

        更新Xml节点内容
#region  更新Xml节点内容
        
/**/ ///   <summary>
        
///  更新Xml节点内容
        
///   </summary>
        
///   <param name="xmlPath"> xml路径 </param>
        
///   <param name="Node"> 要更换内容的节点:节点路径 根节点/父节点/当前节点 </param>
        
///   <param name="Content"> 新的内容 </param>
         public   static   void  XmlNodeReplace( string  xmlPath,  string  Node,  string  Content)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            objXmlDoc.SelectSingleNode(Node).InnerText 
=  Content;
            objXmlDoc.Save(xmlPath);

        }
        
#endregion

        更改节点的属性值
#region  更改节点的属性值
        
/**/ ///   <summary>
        
///  更改节点的属性值
        
///   </summary>
        
///   <param name="xmlPath"> 文件路径 </param>
        
///   <param name="NodePath"> 节点路径 </param>
        
///   <param name="NodeAttribute1"> 要更改的节点属性的名称 </param>
        
///   <param name="NodeAttributeText"> 更改的属性值 </param>
         public   static   void  XmlAttributeEide( string  xmlPath,  string  NodePath,  string  NodeAttribute1,  string  NodeAttributeText)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            XmlNode nodePath 
=  objXmlDoc.SelectSingleNode(NodePath);
            XmlElement xe 
=  (XmlElement)nodePath;
            xe.SetAttribute(NodeAttribute1, NodeAttributeText);
            objXmlDoc.Save(xmlPath);

        }
        
#endregion


        删除XML节点和此节点下的子节点
#region  删除XML节点和此节点下的子节点
        
/**/ ///   <summary>
        
///  删除XML节点和此节点下的子节点
        
///   </summary>
        
///   <param name="xmlPath"> xml文档路径 </param>
        
///   <param name="Node"> 节点路径 </param>
         public   static   void  XmlNodeDelete( string  xmlPath,  string  Node)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            
string  mainNode  =  Node.Substring( 0 , Node.LastIndexOf( " / " ));
            objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
            objXmlDoc.Save(xmlPath);
        }

        
#endregion


        删除一个节点的属性
#region  删除一个节点的属性
        
/**/ ///   <summary>
        
///  删除一个节点的属性
        
///   </summary>
        
///   <param name="xmlPath"> 文件路径 </param>
        
///   <param name="NodePath"> 节点路径(xpath) </param>
        
///   <param name="NodeAttribute"> 属性名称 </param>
         public   static   void  xmlnNodeAttributeDel( string  xmlPath,  string  NodePath,  string  NodeAttribute)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            XmlNode nodePath 
=  objXmlDoc.SelectSingleNode(NodePath);
            XmlElement xe 
=  (XmlElement)nodePath;
            xe.RemoveAttribute(NodeAttribute);
            objXmlDoc.Save(xmlPath);

        }
        
#endregion

        插入一个节点和此节点的子节点
#region  插入一个节点和此节点的子节点
        
/**/ ///   <summary>
        
///  插入一个节点和此节点的字节点
        
///   </summary>
        
///   <param name="xmlPath"> xml路径 </param>
        
///   <param name="MailNode"> 当前节点路径 </param>
        
///   <param name="ChildNode"> 新插入节点 </param>
        
///   <param name="Element"> 插入节点的子节点 </param>
        
///   <param name="Content"> 子节点的内容 </param>
         public   static   void  XmlInsertNode( string  xmlPath,  string  MailNode,  string  ChildNode,  string  Element,  string  Content)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            XmlNode objRootNode 
=  objXmlDoc.SelectSingleNode(MailNode);
            XmlElement objChildNode 
=  objXmlDoc.CreateElement(ChildNode);
            objRootNode.AppendChild(objChildNode);
            XmlElement objElement 
=  objXmlDoc.CreateElement(Element);
            objElement.InnerText 
=  Content;
            objChildNode.AppendChild(objElement);
            objXmlDoc.Save(xmlPath);
        }

        
#endregion


        向一个节点添加属性
#region  向一个节点添加属性
       
/**/ ///   <summary>
       
///  向一个节点添加属性
       
///   </summary>
       
///   <param name="xmlPath"> xml文件路径 </param>
       
///   <param name="NodePath"> 节点路径 </param>
       
///   <param name="NodeAttribute1"> 要添加的节点属性的名称 </param>
       
///   <param name="NodeAttributeText"> 要添加属性的值 </param>
         public   static   void  AddAttribute( string  xmlPath,  string  NodePath,  string  NodeAttribute1,  string  NodeAttributeText)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            XmlAttribute nodeAttribute 
=  objXmlDoc.CreateAttribute(NodeAttribute1);
            XmlNode nodePath 
=  objXmlDoc.SelectSingleNode(NodePath);
            nodePath.Attributes.Append(nodeAttribute);
            XmlElement xe 
=  (XmlElement)nodePath;
            xe.SetAttribute(NodeAttribute1, NodeAttributeText);
            objXmlDoc.Save(xmlPath);
        }
        
#endregion

        插入一节点,带一属性
#region  插入一节点,带一属性
        
/**/ ///   <summary>
        
///  插入一节点,带一属性
        
///   </summary>
        
///   <param name="xmlPath"> Xml文档路径 </param>
        
///   <param name="MainNode"> 当前节点路径 </param>
        
///   <param name="Element"> 新节点 </param>
        
///   <param name="Attrib"> 属性名称 </param>
        
///   <param name="AttribContent"> 属性值 </param>
        
///   <param name="Content"> 新节点值 </param>
         public   static   void  XmlInsertElement( string  xmlPath,  string  MainNode,  string  Element,  string  Attrib,  string  AttribContent,  string  Content)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            XmlNode objNode 
=  objXmlDoc.SelectSingleNode(MainNode);
            XmlElement objElement 
=  objXmlDoc.CreateElement(Element);
            objElement.SetAttribute(Attrib, AttribContent);
            objElement.InnerText 
=  Content;
            objNode.AppendChild(objElement);
            objXmlDoc.Save(xmlPath);
        }

        
#endregion

        插入一节点不带属性
#region  插入一节点不带属性

        
public   static   void  XmlInsertElement( string  xmlPath,  string  MainNode,  string  Element,  string  Content)
        {
            XmlDocument objXmlDoc 
=   new  XmlDocument();
            objXmlDoc.Load(xmlPath);
            XmlNode objNode 
=  objXmlDoc.SelectSingleNode(MainNode);
            XmlElement objElement 
=  objXmlDoc.CreateElement(Element);
            objElement.InnerText 
=  Content;
            objNode.AppendChild(objElement);
            objXmlDoc.Save(xmlPath);
        }

        
#endregion

        在根节点下添加父节点
#region  在根节点下添加父节点
        
/**/ ///   <summary>
        
///  在根节点下添加父节点
        
///   </summary>
         public   static   void  AddParentNode( string  xmlPath, string  parentNode)
        {
            XmlDocument xdoc 
=   new  XmlDocument();
            xdoc.Load(xmlPath);
            
//  创建一个新的menber节点并将它添加到根节点下
            XmlElement Node  =  xdoc.CreateElement(parentNode);
            xdoc.DocumentElement.PrependChild(Node);
            xdoc.Save(xmlPath);
        }
        
#endregion

     

        
// 必须创建对象才能使用的类

        
private   bool  _alreadyDispose  =   false ;
        
private  XmlDocument xmlDoc  =   new  XmlDocument();

        
private  XmlNode xmlNode;
        
private  XmlElement xmlElem;

        构造与释构
#region  构造与释构
        
public  XmlHelper()
        {

        }
        
~ XmlHelper()
        {
            Dispose();
        }
        
protected   virtual   void  Dispose( bool  isDisposing)
        {
            
if  (_alreadyDispose)  return ;
            
if  (isDisposing)
            {
                
//
            }
            _alreadyDispose 
=   true ;
        }
        
#endregion

        IDisposable 成员
#region  IDisposable 成员

        
public   void  Dispose()
        {
            Dispose(
true );
            GC.SuppressFinalize(
this );
        }

        
#endregion

        创建xml文档
#region  创建xml文档


        创建一个只有声明和根节点的XML文档
#region  创建一个只有声明和根节点的XML文档
        
/**/ ///   <summary>
        
///  创建一个只有声明和根节点的XML文档
        
///   </summary>
        
///   <param name="root"></param>
         public   void  CreateXmlRoot( string  root)
        {
            
// 加入XML的声明段落
            xmlNode  =  xmlDoc.CreateNode(XmlNodeType.XmlDeclaration,  "" "" );
            xmlDoc.AppendChild(xmlNode);
            
// 加入一个根元素
            xmlElem  =  xmlDoc.CreateElement( "" , root,  "" );
            xmlDoc.AppendChild(xmlElem);

        }
        
#endregion

        在当前节点下插入一个空节点节点
#region  在当前节点下插入一个空节点节点
        
/**/ ///   <summary>
        
///  在当前节点下插入一个空节点节点
        
///   </summary>
        
///   <param name="mainNode"> 当前节点路径 </param>
        
///   <param name="node"> 节点名称 </param>
         public   void  CreatXmlNode( string  mainNode,  string  node)
        {
            XmlNode MainNode 
=  xmlDoc.SelectSingleNode(mainNode);
            XmlElement objElem 
=  xmlDoc.CreateElement(node);
            MainNode.AppendChild(objElem);
        }
        
#endregion

        在当前节点插入一个仅带值的节点
#region  在当前节点插入一个仅带值的节点
        
/**/ ///   <summary>
        
///   在当前节点插入一个仅带值的节点
        
///   </summary>
        
///   <param name="mainNode"> 当前节点 </param>
        
///   <param name="node"> 新节点 </param>
        
///   <param name="content"> 新节点值 </param>
         public   void  CreatXmlNode( string  mainNode,  string  node,  string  content)
        {
            XmlNode MainNode 
=  xmlDoc.SelectSingleNode(mainNode);
            XmlElement objElem 
=  xmlDoc.CreateElement(node);
            objElem.InnerText 
=  content;
            MainNode.AppendChild(objElem);
        }
        
#endregion

        在当前节点的插入一个仅带属性值的节点
#region  在当前节点的插入一个仅带属性值的节点
        
/**/ ///   <summary>
        
///  在当前节点的插入一个仅带属性值的节点
        
///   </summary>
        
///   <param name="MainNode"> 当前节点或路径 </param>
        
///   <param name="Node"> 新节点 </param>
        
///   <param name="Attrib"> 新节点属性名称 </param>
        
///   <param name="AttribValue"> 新节点属性值 </param>
         public   void  CreatXmlNode( string  MainNode,  string  Node,  string  Attrib,  string  AttribValue)
        {
            XmlNode mainNode 
=  xmlDoc.SelectSingleNode(MainNode);
            XmlElement objElem 
=  xmlDoc.CreateElement(Node);
            objElem.SetAttribute(Attrib, AttribValue);
            mainNode.AppendChild(objElem);
        }
        
#endregion

        创建一个带属性值的节点值的节点
#region  创建一个带属性值的节点值的节点
        
/**/ ///   <summary>
        
///  创建一个带属性值的节点值的节点
        
///   </summary>
        
///   <param name="MainNode"> 当前节点或路径 </param>
        
///   <param name="Node"> 节点名称 </param>
        
///   <param name="Attrib"> 属性名称 </param>
        
///   <param name="AttribValue"> 属性值 </param>
        
///   <param name="Content"> 节点传情 </param>
         public   void  CreatXmlNode( string  MainNode,  string  Node,  string  Attrib,  string  AttribValue,  string  Content)
        {
            XmlNode mainNode 
=  xmlDoc.SelectSingleNode(MainNode);
            XmlElement objElem 
=  xmlDoc.CreateElement(Node);
            objElem.SetAttribute(Attrib, AttribValue);
            objElem.InnerText 
=  Content;
            mainNode.AppendChild(objElem);
        }
        
#endregion

        在当前节点的插入一个仅带2个属性值的节点
#region  在当前节点的插入一个仅带2个属性值的节点
        
/**/ ///   <summary>
        
///   在当前节点的插入一个仅带2个属性值的节点
        
///   </summary>
        
///   <param name="MainNode"> 当前节点或路径 </param>
        
///   <param name="Node"> 节点名称 </param>
        
///   <param name="Attrib"> 属性名称一 </param>
        
///   <param name="AttribValue"> 属性值一 </param>
        
///   <param name="Attrib2"> 属性名称二 </param>
        
///   <param name="AttribValue2"> 属性值二 </param>
         public   void  CreatXmlNode( string  MainNode,  string  Node,  string  Attrib,  string  AttribValue,  string  Attrib2,  string  AttribValue2)
        {
            XmlNode mainNode 
=  xmlDoc.SelectSingleNode(MainNode);
            XmlElement objElem 
=  xmlDoc.CreateElement(Node);
            objElem.SetAttribute(Attrib, AttribValue);
            objElem.SetAttribute(Attrib2, AttribValue2);
            mainNode.AppendChild(objElem);
        }
        
#endregion

        在当前节点插入带两个属性的节点
#region  在当前节点插入带两个属性的节点
        
/**/ ///   <summary>
        
///   在当前节点插入带两个属性的节点
        
///   </summary>
        
///   <param name="MainNode"> 当前节点或路径 </param>
        
///   <param name="Node"> 节点名称 </param>
        
///   <param name="Attrib"> 属性名称一 </param>
        
///   <param name="AttribValue"> 属性值一 </param>
        
///   <param name="Attrib2"> 属性名称二 </param>
        
///   <param name="AttribValue2"> 属性值二 </param>
        
///   <param name="Content"> 节点值 </param>
         public   void  CreatXmlNode( string  MainNode,  string  Node,  string  Attrib,  string  AttribValue,  string  Attrib2,  string  AttribValue2,  string  Content)
        {
            XmlNode mainNode 
=  xmlDoc.SelectSingleNode(MainNode);
            XmlElement objElem 
=  xmlDoc.CreateElement(Node);
            objElem.SetAttribute(Attrib, AttribValue);
            objElem.SetAttribute(Attrib2, AttribValue2);
            objElem.InnerText 
=  Content;
            mainNode.AppendChild(objElem);
        }
        
#endregion

        保存Xml
#region  保存Xml
        
/**/ ///   <summary>
        
///  保存Xml
        
///   </summary>
        
///   <param name="path"> 保存的当前路径 </param>
         public   void  XmlSave( string  path)
        {
            xmlDoc.Save(path);
        }

        
#endregion

        
#endregion

        读取指定节点的指定属性值
#region  读取指定节点的指定属性值
        
/**/ ///   <summary>
        
///  功能:
        
///  读取指定节点的指定属性值
        
///   </summary>
        
///   <param name="strNode"> 节点路径 </param>
        
///   <param name="strAttribute"> 此节点的属性 </param>
        
///   <returns></returns>
         public   string  GetXmlNodeAttribute( string  xmlPath,  string  strNode,  string  strAttribute)
        {
            
string  strReturn  =   "" ;
            xmlDoc.Load(xmlPath);
            
try
            {
                
// 根据指定路径获取节点
                XmlNode xmlNode  =  xmlDoc.SelectSingleNode(strNode);
                
// 获取节点的属性,并循环取出需要的属性值
                XmlAttributeCollection xmlAttr  =  xmlNode.Attributes;

                
for  ( int  i  =   0 ; i  <  xmlAttr.Count; i ++ )
                {
                    
if  (xmlAttr.Item(i).Name  ==  strAttribute)
                        strReturn 
=  xmlAttr.Item(i).Value;
                }
            }
            
catch  (XmlException xmle)
            {
                
throw  xmle;
            }
            
return  strReturn;
        }
        
#endregion

        读取指定节点的值
#region  读取指定节点的值
        
/**/ ///   <summary>
        
///  功能:
        
///  读取指定节点的值
        
///   </summary>
        
///   <param name="strNode"> 节点名称(xpath) </param>
        
///   <returns></returns>
         public   string  GetXmlNodeValue( string  xmlPath, string  strNode)
        {
            
string  strReturn  =  String.Empty;
            xmlDoc.Load(xmlPath);
            
try
            {
                
// 根据路径获取节点
                XmlNode xmlNode  =  xmlDoc.SelectSingleNode(strNode);
                strReturn 
=  xmlNode.InnerText;
            }
            
catch  (XmlException xmle)
            {
                System.Console.WriteLine(xmle.Message);
            }
            
return  strReturn;
        }
        
#endregion



        根据节点属性读取子节点值(较省资源模式)
#region  根据节点属性读取子节点值(较省资源模式)
        
/**/ ///   <summary>
        
///  根据节点属性读取子节点值(较省资源模式)
        
///   </summary>
        
///   <param name="XmlPath"> xml路径 </param>
        
///   <param name="FatherElement"> 父节点值 </param>
        
///   <param name="AttributeName"> 属性名称 </param>
        
///   <param name="AttributeValue"> 属性值 </param>
        
///   <param name="ArrayLength"> 返回的数组长度 </param>
        
///   <returns></returns>
         public   static  System.Collections.ArrayList GetSubElementByAttribute( string  XmlPath,  string  FatherElement,  string  AttributeName,  string  AttributeValue,  int  ArrayLength)
        {
            System.Collections.ArrayList al 
=   new  System.Collections.ArrayList();
            XmlDocument docXml 
=   new  XmlDocument();
            docXml.Load(@XmlPath);
            XmlNodeList xn;
            xn 
=  docXml.DocumentElement.SelectNodes( " // "   +  FatherElement  +   " [ "   +  @AttributeName  +   " =' "   +  AttributeValue  +   " '] " );
            XmlNodeList xx 
=  xn.Item( 0 ).ChildNodes;
            
for  ( int  i  =   0 ; i  <  ArrayLength  &  i  <  xx.Count; i ++ )
            {

                al.Add(xx.Item(i).InnerText);
            }
            
return  al;

        }
        
#endregion
    }

转载于:https://www.cnblogs.com/ggbbeyou/archive/2009/04/24/1442843.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值