ฉันอยากเขียนคลาสสำหรับปฏิบัติการไฟล์ XML มาโดยตลอด วันนี้ฉันค้นหาทางออนไลน์และพบคลาสที่คล้ายกันซึ่งฉันได้เขียนไว้แล้ว และในที่สุดมันก็กลายเป็นโค้ดต่อไปนี้สำหรับการอ้างอิงของมือใหม่
-
กิจกรรม XML ถูกใช้ในคลาสนี้ การค้นหาโหนดในคลาสนี้ต้องใช้นิพจน์ xpath หากคุณไม่เข้าใจนิพจน์ xpath คุณสามารถดูบทความอื่นในคอลเลกชันของฉัน: +การดำเนินการไฟล์ XML: [การเรียนรู้ xpath]XPath The บทช่วยสอนยอดนิยม +
1 การใช้ระบบ;
2ใช้ System.Xml;
3ใช้ระบบ.เว็บ;
4เนมสเปซโซลัคกี้
5{
6 /***//// <สรุป>
7 /// ต้องใช้นิพจน์ XPATH เพื่อรับโหนดที่เกี่ยวข้อง
8 /// สำหรับข้อมูลเกี่ยวกับ xpath โปรดดูที่:
9 /// </สรุป>
10 MyXml คลาสสาธารณะ
11 {
12 ตัวแปร#ตัวแปรภูมิภาค
13 /***//// <สรุป>
14 /// ประเภทเส้นทางที่มีไฟล์ xml อยู่
15 /// </สรุป>
16 /// <remarks>ประเภทพาธที่มีไฟล์ xml อยู่</remarks>
17 enum สาธารณะ enumXmlPathType
18 {
19 /***////// <สรุป>
20 /// เส้นทางที่แน่นอน
21 /// </สรุป>
22เส้นทางสัมบูรณ์
23 /***//// <สรุป>
24 /// เส้นทางเสมือน
25 /// </สรุป>
26เส้นทางเสมือน
27}
28
29 สตริงส่วนตัว xmlFilePath;
30 enumXmlPathType ส่วนตัว xmlFilePathType;
31 XmlDocument ส่วนตัว xmlDoc = XmlDocument ใหม่();
32#endregion
33
34
คุณสมบัติ 35 รายการ#คุณสมบัติของภูมิภาค
36 /***////// <สรุป>
37 /// เส้นทางไฟล์
38 /// </สรุป>
39 /// <remarks>เส้นทางไฟล์</remarks>
40 สตริงสาธารณะ XmlFilePath
41 {
42 ได้รับ
43 {
44 กลับ this.xmlFilePath;
45 }
46 ชุด
47 {
48 xmlFilePath = ค่า;
49
50 }
51 }
52
53 /***//// <สรุป>
54 /// ประเภทเส้นทางไฟล์
55 /// </สรุป>
56 enumXmlPathType สาธารณะ XmlFilePathTyp
57 {
58 ชุด
59 {
60 xmlFilePathType = ค่า;
61 }
62 }
63#สิ้นสุดภูมิภาค
64
65 ตัวสร้าง #ตัวสร้างภูมิภาค
66 /***//// <สรุป>
67 ///
68 /// </สรุป>
69 /// <param name="tempXmlFilePath"></param>
70 MyXml สาธารณะ (สตริง tempXmlFilePath)
71 {
72 //
73 // สิ่งที่ต้องทำ: เพิ่มตรรกะคอนสตรัคเตอร์ที่นี่
74 //
75
76 this.xmlFilePathType = enumXmlPathType.VirtualPath;
77 this.xmlFilePath = tempXmlFilePath;
78 GetXmlDocument();
79 //xmlDoc.Load(xmlFilePath);
80}
81
82 /***//// <สรุป>
83 /// ตัวสร้าง
84 /// </สรุป>
85 /// <param name="tempXmlFilePath">เส้นทางของไฟล์</param>
86 /// <param name="tempXmlFilePathType">ประเภท</param>
87 MyXml สาธารณะ (สตริง tempXmlFilePath , enumXmlPathType tempXmlFilePathType )
88 {
89 //
90 // สิ่งที่ต้องทำ: เพิ่มตรรกะคอนสตรัคเตอร์ที่นี่
91 //
92 this.xmlFilePathType = tempXmlFilePathType;
93 this.xmlFilePath = tempXmlFilePath;
94 GetXmlDocument();
95 }
96 #สิ้นสุดภูมิภาค
97
98
99 /**//////<สรุป>
100 ///รับคลาสเอนทิตี XmlDocument
101 ///</สรุป>
102 /// <returns>อินสแตนซ์ xmldocument ของไฟล์คำอธิบาย XML ที่ระบุ</returns>
103 XmlDocument GetXmlDocument() ส่วนตัว
104 {
105 เอกสาร XmlDocument=null;
106
107 ถ้า( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
108 {
109 doc = GetXmlDocumentFromFile( xmlFilePath );
110 }
111 อื่น ๆ ถ้า ( this.xmlFilePathType == enumXmlPathType.VirtualPath )
112 {
113 doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath));
114 }
115 เอกสารส่งคืน;
116 }
117
118 XmlDocument GetXmlDocumentFromFile ส่วนตัว (สตริง tempXmlFilePath)
119 {
120 สตริง xmlFileFullPath = tempXmlFilePath;
121 xmlDoc.Load(xmlFileFullPath);
122 //กำหนดการประมวลผลเหตุการณ์
123 xmlDoc.NodeChanged += XmlNodeChangedEventHandler ใหม่ (this.nodeUpdateEvent);
124 xmlDoc.NodeInserted += ใหม่ XmlNodeChangedEventHandler (this.nodeInsertEvent);
125 xmlDoc.NodeRemoved += ใหม่ XmlNodeChangedEventHandler (this.nodeDeleteEvent);
126 ส่งคืน xmlDoc;
127 }
128
129 อ่านค่าแอตทริบิวต์ที่ระบุของโหนดที่ระบุ #region อ่านค่าแอตทริบิวต์ที่ระบุของโหนดที่ระบุ
130 /***////// <สรุป>
131 /// ฟังก์ชั่น:
132 /// อ่านค่าแอตทริบิวต์ที่ระบุของโหนดที่ระบุ
133 /// </สรุป>
134 /// <param name="strNode">ชื่อโหนด</param>
135 /// <param name="strAttribute">คุณสมบัติของโหนดนี้</param>
136 /// <ส่งคืน></ส่งคืน>
137 สตริงสาธารณะ GetXmlNodeAttributeValue (สตริง strNode, สตริง strAttribute)
138 {
139 สตริง strReturn = "";
140 ลอง.
141 {
142 // รับโหนดตามเส้นทางที่ระบุ
143 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
144 ถ้า (!(xmlNode==null))
145 {//รับแอตทริบิวต์ของโหนดและวนค่าแอตทริบิวต์ที่จำเป็นออก
146 XmlAttributeCollection xmlAttr = xmlNode.แอตทริบิวต์;
147
148 สำหรับ(int i=0;i<xmlAttr.Count; i++)
149 {
150 ถ้า (xmlAttr.Item(i).Name == strAttribute)
151 {
152 strReturn = xmlAttr.Item(i).มูลค่า;
153 แตก;
154 }
155 }
156 }
157 }
158 จับ (XmlException xmle)
159 {
160 โยน xmle;
161 }
162 กลับ strReturn;
163 }
164#สิ้นสุดภูมิภาค
165
166
167 อ่านค่าของโหนดที่ระบุ #region อ่านค่าของโหนดที่ระบุ
168 /***////// <สรุป>
169 /// ฟังก์ชั่น:
170 /// อ่านค่าของโหนดที่ระบุ
171 /// </สรุป>
172 /// <param name="strNode">ชื่อโหนด</param>
173 /// <ส่งคืน></ส่งคืน>
174 สตริงสาธารณะ GetXmlNodeValue (สตริง strNode)
175 {
176 สตริง strReturn = String.Empty;
177
178 พยายาม
179 {
180 //รับโหนดตามเส้นทาง
181 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
182 ถ้า (!(xmlNode==null))
183 strReturn = xmlNode.InnerText;
184}
185 จับ (XmlException xmle)
186 {
187 โยน xmle;
188 }
189 กลับ strReturn;
190 }
191#เขตแดน
192
193 ตั้งค่าโหนด #region ตั้งค่าโหนด
194 /***////// <สรุป>
195 /// ฟังก์ชั่น:
196 /// ตั้งค่าโหนด
197 /// </สรุป>
198 /// <param name="strNode">ชื่อของโหนด</param>
199 /// <param name="newValue">ค่าโหนด</param>
200 โมฆะสาธารณะ SetXmlNodeValue (สตริง xmlNodePath, สตริง xmlNodeValue)
201 {
202 พยายาม
203 {
204 //คุณสามารถชำระเงินเป็นชุดสำหรับโหนดที่ตรงตามเงื่อนไข
205 XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
206 ถ้า (!(xmlNode==null))
207 {
208 foreach (XmlNode xn ใน xmlNode)
209 {
210 xn.InnerText = xmlNodeValue;
211 }
212 }
213 /**//*
214 * รับโหนดตามเส้นทางที่ระบุ
215 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath);
216 // ตั้งค่าโหนด
217 ถ้า (!(xmlNode==null))
218 xmlNode.InnerText = xmlNodeValue;*/
219 }
220 จับ (XmlException xmle)
221 {
222 โยน xmle;
223 }
224 }
225#endregion
226
227 ตั้งค่าแอตทริบิวต์ของโหนด #region ตั้งค่าแอตทริบิวต์ของโหนด
228 /***////// <สรุป>
229 /// ฟังก์ชั่น:
230 ///ตั้งค่าแอตทริบิวต์ของโหนด
231 /// </สรุป>
232 /// <param name="xmlNodePath">ชื่อโหนด</param>
233 /// <param name="xmlNodeAttribute">ชื่อแอตทริบิวต์</param>
234 /// <param name="xmlNodeAttributeValue">ค่าแอตทริบิวต์</param>
235 โมฆะสาธารณะ SetXmlNodeAttributeValue (สตริง xmlNodePath, สตริง xmlNodeAttribute, สตริง xmlNodeAttributeValue)
236 {
237 พยายาม
238 {
239 //คุณสามารถจ่ายแอตทริบิวต์ของโหนดที่ผ่านการรับรองเป็นชุดได้
240 XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
241 ถ้า (!(xmlNode==null))
242 {
243 foreach (XmlNode xn ใน xmlNode)
244 {
245 XmlAttributeCollection xmlAttr = xn.แอตทริบิวต์;
246 สำหรับ(int i=0; i<xmlAttr.Count; i++)
247 {
248 ถ้า ( xmlAttr.Item(i).Name == xmlNodeAttribute )
249 {
250 xmlAttr.Item(i).Value = xmlNodeAttributeValue;
251 แตก;
252 }
253 }
254 }
255 }
256 /**//*โหนดเดียว
257 // รับโหนดตามเส้นทางที่ระบุ
258 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath);
259 ถ้า (!(xmlNode==null))
260 {//รับแอตทริบิวต์ของโหนดและวนค่าแอตทริบิวต์ที่จำเป็นออก
261 XmlAttributeCollection xmlAttr = xmlNode.แอตทริบิวต์;
262 สำหรับ(int i=0; i<xmlAttr.Count; i++)
263 {
264 ถ้า ( xmlAttr.Item(i).Name == xmlNodeAttribute )
265 {
266 xmlAttr.Item(i).Value = xmlNodeAttributeValue;
267 แตก;
268 }
269 }
270 }
271 */
272 }
273 จับ (XmlException xmle)
274 {
275 โยน xmle;
276 }
277 }
278 #สิ้นสุดภูมิภาค
279
280 เพิ่ม #ภูมิภาค เพิ่ม
281 /***//// <สรุป>
282 /// รับองค์ประกอบรูทของไฟล์ XML
283 /// </สรุป>
284 XmlNode สาธารณะ GetXmlRoot()
285 {
286 กลับ xmlDoc.DocumentElement;
287 }
288
289 /***//// <สรุป>
290 /// เพิ่มโหนดหลักภายใต้โหนดรูท
291 /// </สรุป>
292 โมฆะสาธารณะ AddParentNode (สตริง parentNode)
293 {
294 พยายาม
295 {
296 ราก XmlNode = GetXmlRoot();
297 XmlNode parentXmlNode = xmlDoc.CreateElement(โหนดหลัก);
298 root.AppendChild(parentXmlNode);
299 }
300 จับ (XmlException xmle)
301 {
302 โยน xmle;
303 }
304 }
305
306 /***//// <สรุป>
307 /// แทรกโหนดลูกลงในโหนดหลักที่มีอยู่
308 /// </สรุป>
309 /// <param name="parentNodePath">โหนดหลัก</param>
310 /// <param name="childNodePath">ชื่อจุดไบต์</param>
311 โมฆะสาธารณะ AddChildNode (สตริง parentNodePath, สตริงชื่อโหนดย่อย)
312 {
313 พยายาม
314 {
315 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
316 if(!((parentXmlNode)==null))//ถ้ามีโหนดนี้อยู่
317 {
318 XmlNode childXmlNode = xmlDoc.CreateElement(ชื่อโหนดย่อย);
319 parentXmlNode.AppendChild( childXmlNode );
320 }
321 else{//หากไม่มี ให้เพิ่มโหนดหลัก
322 //this.GetXmlRoot().ผนวกเด็ก(childXmlNode);
323 }
324
325 }
326 จับ (XmlException xmle)
327 {
328 โยน xmle;
329 }
330 }
331
332 //////// <สรุป>
333 /// เพิ่มคุณลักษณะให้กับโหนด
334 /// </สรุป>
335 /// <param name="NodePath">เส้นทางของโหนด</param>
336 /// <param name="NodeAttribute">ชื่อแอตทริบิวต์</param>
337 AddAttribute โมฆะสาธารณะ (สตริง NodePath, สตริง NodeAttribute)
338 {
339 privateAddAttribute(NodePath,NodeAttribute,"");
340 }
341 //////// <สรุป>
342 ///
343 /// </สรุป>
344 /// <param name="NodePath"></param>
345 /// <ชื่อพารามิเตอร์="NodeAttribute"></param>
346 /// <param name="NodeAttributeValue"></param>
347 โมฆะส่วนตัว privateAddAttribute (สตริง NodePath, สตริง NodeAttribute, สตริง NodeAttributeValue)
348 {
349 ลองครับ
350 {
351 XmlNode nodePath = xmlDoc.SelectSingleNode(NodePath);
352 ถ้า (!(nodePath==null))
353 {
354 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
355 nodeAttribute.Value=NodeAttributeValue;
356 nodePath.Attributes.Append (nodeAttribute);
357 }
358 }
359 จับ (XmlException xmle)
360 {
361 โยน xmle;
362 }
363 }
364 //////// <สรุป>
365 /// เพิ่มคุณสมบัติให้กับโหนดและจ่ายมูลค่า
366 /// </สรุป>
367 /// <param name="NodePath">โหนด</param>
368 /// <param name="NodeAttribute">ชื่อแอตทริบิวต์</param>
369 /// <param name="NodeAttributeValue">ค่าแอตทริบิวต์</param>
370 โมฆะสาธารณะ AddAttribute (สตริง NodePath, สตริง NodeAttribute, สตริง NodeAttributeValue)
371 {
372 privateAddAttribute (NodePath, NodeAttribute, NodeAttributeValue);
373 }
374#endregion
375
376 ลบ #ภูมิภาค ลบ
377 /***//// <สรุป>
378 /// ลบแอตทริบิวต์ของโหนด
379 /// </สรุป>
380 /// <param name="NodePath">นิพจน์ xpath ที่โหนดตั้งอยู่</param>
381 /// <param name="NodeAttribute">ชื่อแอตทริบิวต์</param>
382 โมฆะสาธารณะ DeleteAttribute (สตริง NodePath, สตริง NodeAttribute)
383 {
384 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
385 ถ้า (!(nodePath==null))
386 {
387 foreach (XmlNode tempxn ใน nodePath)
388 {
389 XmlAttributeCollection xmlAttr = tempxn.แอตทริบิวต์;
390 สำหรับ(int i=0; i<xmlAttr.Count; i++)
391 {
392 ถ้า (xmlAttr.Item(i).Name == NodeAttribute)
393 {
394 tempxn.แอตทริบิวต์RemoveAt(i);
395 แตก;
396 }
397 }
398 }
399 }
400 }
401
402 /***////// <สรุป>
403 /// ลบโหนดเมื่อค่าแอตทริบิวต์เท่ากับค่าที่กำหนด
404 /// </สรุป>
405 /// <param name="NodePath">นิพจน์ xpath ที่โหนดตั้งอยู่</param>
406 /// <param name="NodeAttribute">แอตทริบิวต์</param>
407 /// <param name="NodeAttributeValue">ค่า</param>
408 โมฆะสาธารณะ DeleteAttribute (สตริง NodePath สตริง NodeAttribute สตริง NodeAttributeValue)
409 {
410 XmlNodeList nodePath =this.xmlDoc.SelectNodes (NodePath);
411 ถ้า (!(nodePath==null))
412 {
413 foreach (XmlNode tempxn ใน nodePath)
414 {
415 XmlAttributeCollection xmlAttr = tempxn.แอตทริบิวต์;
416 สำหรับ(int i=0; i<xmlAttr.Count; i++)
417 {
418 ถ้า (xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value==NodeAttributeValue)
419 {
420 tempxn.แอตทริบิวต์RemoveAt(i);
421 แตก;
422 }
423 }
424 }
425 }
426 }
427 //////// <สรุป>
428 /// ลบโหนด
429 /// </สรุป>
430 /// <ชื่อพารามิเตอร์ = "tempXmlNode" ></ พารามิเตอร์ >
431 /// <หมายเหตุ></หมายเหตุ>
432 โมฆะสาธารณะ DeleteXmlNode (สตริง tempXmlNode) {
433 XmlNodeList nodePath =this.xmlDoc.SelectNodes(tempXmlNode);
434 ถ้า (!(nodePath==null))
435 {
436 foreach (XmlNode xn ใน nodePath)
437 {
438 xn.ParentNode.RemoveChild(xn);
439 }
440 }
441 }
442
443#สิ้นสุดภูมิภาค
444
445 เหตุการณ์เอกสาร XML#region เหตุการณ์เอกสาร XML
446 /***//// <สรุป>
447 ///
448 /// </สรุป>
449 /// <param name="src"></param>
450 /// <ชื่อพารามิเตอร์="args"></param>
451 โมฆะส่วนตัว nodeInsertEvent (Object src, XmlNodeChangedEventArgs args)
452 {
453 //บันทึกการตั้งค่า
454 SaveXmlDocument();
455 }
456 //////// <สรุป>
457 ///
458 /// </สรุป>
459 /// <param name="src"></param>
460 /// <param name="args"></param>
461 โมฆะส่วนตัว nodeDeleteEvent (Object src, XmlNodeChangedEventArgs args)
462 {
463 //บันทึกการตั้งค่า
464 SaveXmlDocument();
465 }
466 /***//// <สรุป>
467 ///
468 /// </สรุป>
469 /// <param name="src"></param>
470 /// <param name="args"></param>
471 โมฆะส่วนตัว nodeUpdateEvent (Object src, XmlNodeChangedEventArgs args)
472 {
473 //บันทึกการตั้งค่า
474 SaveXmlDocument();
475 }
476 #สิ้นสุดภูมิภาค
477
478 บันทึกไฟล์ XML #region บันทึกไฟล์ XML
479 /***//// <สรุป>
480 /// ฟังก์ชั่น:
481 /// บันทึกไฟล์ XML
482 ///
483 /// </สรุป>
484 โมฆะสาธารณะ SaveXmlDocument()
485 {
486 พยายาม
487 {
488 //บันทึกผลการตั้งค่า
489 ถ้า ( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
490 {
491 Savexml(xmlFilePath);
492 }
493 อื่น ๆ ถ้า ( this.xmlFilePathType == enumXmlPathType.VirtualPath )
494 {
495 Savexml(HttpContext.Current.Server.MapPath(xmlFilePath));
496 }
497 }
498 จับ (XmlException xmle)
499 {
500 โยน xmle;
501 }
502 }
503
504 //////// <สรุป>
505 /// ฟังก์ชั่น:
506 /// บันทึกไฟล์ XML
507 /// </สรุป>
508 โมฆะสาธารณะ SaveXmlDocument (สตริง tempXMLFilePath)
509 {
510 ลอง
511 {
512 //บันทึกผลการตั้งค่า
513 Savexml(tempXMLFilePath);
514 }
515 จับ (XmlException xmle)
516 {
517 โยน xmle;
518 }
519 }
520 /***//// <สรุป>
521 ///
522 /// </สรุป>
523 /// <param name="filepath"></param>
524 โมฆะส่วนตัว Savexml (เส้นทางไฟล์สตริง)
525 {
526 xmlDoc.Save(เส้นทางไฟล์);
527 }
528
529#สิ้นสุดภูมิภาค
530
531 }
532
533}
534
535