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