.net操纵xml文件类(c#)_asp.net技巧1(转)

1using System;
  2using System.Xml;
  3using System.Web;
  4namespace solucky
  5{
  6    /**//// <summary>
  7    /// 必需用XPATH表达式来获取相应节点
  8    /// 关于xpath可以参见:
  9    /// </summary>
 10    public class MyXml
 11    {
 12        变量#region 变量
 13        /**//// <summary>
 14        /// xml文件所在路径类型
 15        /// </summary>
 16        /// <remarks>xml文件所在路径类型</remarks>
 17        public enum enumXmlPathType
 18        {    
 19            /**//// <summary>
 20            /// 绝对路径
 21            /// </summary>
 22            AbsolutePath,
 23            /**//// <summary>
 24            /// 虚拟路径
 25            /// </summary>
 26            VirtualPath
 27        }
 28
 29        private string xmlFilePath ;
 30        private enumXmlPathType xmlFilePathType ;
 31        private XmlDocument xmlDoc = new XmlDocument() ;
 32        #endregion
 33
 34
 35        属性#region 属性
 36        /**//// <summary>
 37        /// 文件路径
 38        /// </summary>
 39        /// <remarks>文件路径</remarks>
 40        public string XmlFilePath
 41        {
 42            get
 43            {
 44                return this.xmlFilePath;
 45            }
 46            set
 47            {
 48                xmlFilePath = value ;
 49
 50            }
 51        }
 52
 53        /**//// <summary>
 54        /// 文件路径类型
 55        /// </summary>
 56        public enumXmlPathType XmlFilePathTyp
 57        {
 58            set
 59            {
 60                xmlFilePathType = value ;
 61            }
 62        }
 63        #endregion
 64
 65        构造函数#region 构造函数
 66        /**//// <summary>
 67        /// 
 68        /// </summary>
 69        /// <param name="tempXmlFilePath"></param>
 70        public MyXml( string tempXmlFilePath )
 71        {
 72            //
 73            // TODO: 在此处添加构造函数逻辑
 74            //
 75
 76            this.xmlFilePathType = enumXmlPathType.VirtualPath ;
 77            this.xmlFilePath = tempXmlFilePath ;
 78            GetXmlDocument() ;
 79            //xmlDoc.Load( xmlFilePath ) ;
 80        }
 81    
 82        /**//// <summary>
 83        /// 构造函数
 84        /// </summary>
 85        /// <param name="tempXmlFilePath">文件路径</param>
 86        /// <param name="tempXmlFilePathType">类型</param>
 87        public MyXml( string tempXmlFilePath , enumXmlPathType tempXmlFilePathType )
 88        {
 89            //
 90            // TODO: 在此处添加构造函数逻辑
 91            //
 92            this.xmlFilePathType = tempXmlFilePathType ;
 93            this.xmlFilePath = tempXmlFilePath ;
 94            GetXmlDocument() ;
 95        }
 96        #endregion
 97
 98
 99        /**////<summary>
100        ///获取XmlDocument实体类
101        ///</summary>    
102        /// <returns>指定的XML描述文件的一个xmldocument实例</returns>
103        private XmlDocument GetXmlDocument()
104        {
105            XmlDocument doc=null;
106
107            if( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
108            {
109                doc = GetXmlDocumentFromFile( xmlFilePath ) ;
110            }
111            else if( this.xmlFilePathType == enumXmlPathType.VirtualPath )
112            {
113                doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath)) ;
114            }
115            return doc;
116        }
117
118        private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath)
119        {
120            string xmlFileFullPath = tempXmlFilePath ;
121            xmlDoc.Load(xmlFileFullPath) ;
122            //定义事件处理
123            xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent);
124            xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent);
125            xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent);
126            return xmlDoc ;
127        }
128
129        读取指定节点的指定属性值#region 读取指定节点的指定属性值
130        /**//// <summary>
131        /// 功能:
132        /// 读取指定节点的指定属性值    
133        /// </summary>
134        /// <param name="strNode">节点名称</param>
135        /// <param name="strAttribute">此节点的属性</param>
136        /// <returns></returns>
137        public string GetXmlNodeAttributeValue(string strNode,string strAttribute)
138        {
139            string strReturn = "";
140            try
141            {
142                //根据指定路径获取节点
143                XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ;
144                if (!(xmlNode==null))
145                {//获取节点的属性,并循环取出需要的属性值
146                    XmlAttributeCollection xmlAttr = xmlNode.Attributes ;
147
148                    for(int i=0 ;i<xmlAttr.Count; i++)
149                    {
150                        if (xmlAttr.Item(i).Name == strAttribute)
151                        {
152                            strReturn = xmlAttr.Item(i).Value ;
153                            break;
154                        }
155                    }
156                }
157            }
158            catch(XmlException xmle)
159            {
160                throw xmle ;
161            }
162            return strReturn ;
163        }
164        #endregion 
165
166
167        读取指定节点的值#region 读取指定节点的值
168        /**//// <summary>
169        /// 功能:
170        /// 读取指定节点的值    
171        /// </summary>
172        /// <param name="strNode">节点名称</param>
173        /// <returns></returns>
174        public string GetXmlNodeValue(string strNode)
175        {
176            string strReturn = String.Empty ;
177
178            try
179            {
180                //根据路径获取节点
181                XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ;
182                if (!(xmlNode==null))
183                    strReturn = xmlNode.InnerText ;
184            }
185            catch(XmlException xmle)
186            {
187                throw xmle ;
188            }
189            return strReturn ;
190        }
191        #endregion
192
193        设置节点值#region 设置节点值
194        /**//// <summary>
195        /// 功能:
196        /// 设置节点值        
197        /// </summary>
198        /// <param name="strNode">节点的名称</param>
199        /// <param name="newValue">节点值</param>
200        public void SetXmlNodeValue(string xmlNodePath,string xmlNodeValue)
201        {
202            try
203            {
204                //可以批量为符合条件的节点进行付值
205                XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
206                if (!(xmlNode==null))
207                {
208                    foreach(XmlNode xn in xmlNode)
209                    {
210                        xn.InnerText = xmlNodeValue ;    
211                    }
212                }
213                /**//*
214                 * 根据指定路径获取节点
215                XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;            
216                //设置节点值
217                if (!(xmlNode==null))
218                    xmlNode.InnerText = xmlNodeValue ;*/                
219            }
220            catch(XmlException xmle)
221            {
222                throw xmle ;
223            }
224        }
225        #endregion
226
227        设置节点的属性值#region 设置节点的属性值
228        /**//// <summary>
229        /// 功能:
230        /// 设置节点的属性值    
231        /// </summary>
232        /// <param name="xmlNodePath">节点名称</param>
233        /// <param name="xmlNodeAttribute">属性名称</param>
234        /// <param name="xmlNodeAttributeValue">属性值</param>
235        public void SetXmlNodeAttributeValue(string xmlNodePath,string xmlNodeAttribute,string xmlNodeAttributeValue)
236        {
237            try
238            {
239                //可以批量为符合条件的节点的属性付值
240                XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
241                if (!(xmlNode==null))
242                {
243                    foreach(XmlNode xn in xmlNode)
244                    {
245                        XmlAttributeCollection xmlAttr = xn.Attributes ;
246                        for(int i=0 ; i<xmlAttr.Count ; i++)
247                        {
248                            if ( xmlAttr.Item(i).Name == xmlNodeAttribute )
249                            {
250                                xmlAttr.Item(i).Value = xmlNodeAttributeValue;
251                                break ;
252                            }
253                        }    
254                    }
255                }
256                /**//*单个节点
257                //根据指定路径获取节点
258                XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;
259                if (!(xmlNode==null))
260                {//获取节点的属性,并循环取出需要的属性值
261                    XmlAttributeCollection xmlAttr = xmlNode.Attributes ;
262                    for(int i=0 ; i<xmlAttr.Count ; i++)
263                    {
264                        if ( xmlAttr.Item(i).Name == xmlNodeAttribute )
265                        {
266                            xmlAttr.Item(i).Value = xmlNodeAttributeValue;
267                            break ;
268                        }
269                    }    
270                }
271                */
272            }
273            catch(XmlException xmle)
274            {
275                throw xmle ;
276            }
277        }
278        #endregion
279
280        添加#region 添加
281        /**//// <summary>
282        /// 获取XML文件的根元素
283        /// </summary>
284        public XmlNode GetXmlRoot()
285        {
286            return xmlDoc.DocumentElement ;
287        }
288
289        /**//// <summary>
290        /// 在根节点下添加父节点
291        /// </summary>
292        public void AddParentNode(string parentNode)
293        {
294            try
295            {
296                XmlNode root = GetXmlRoot() ;
297                XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode) ;
298                root.AppendChild(parentXmlNode) ;                
299            }
300            catch(XmlException xmle)
301            {
302                throw xmle ;
303            }
304        }
305        

 

posted @ 2012-04-20 23:33  sidihu  阅读(211)  评论(0编辑  收藏  举报