لقد أردت دائمًا كتابة فصل دراسي لتشغيل ملفات XML، لقد بحثت عبر الإنترنت اليوم ووجدت فصلًا مشابهًا قمت بكتابته بالفعل وقمت بتوسيعه وتعديله، وأخيرًا أصبح الكود التالي مرجعًا للمبتدئين.
//
يتم استخدام أحداث XML في هذه الفئة. يجب أن يستخدم البحث عن العقد في هذه الفئة تعبيرات xpath. إذا كنت لا تفهم تعبيرات xpath، فيمكنك مراجعة مقالة أخرى في مجموعتي: + عملية ملف XML: [Learning xpath]XPath. البرنامج التعليمي الأكثر شعبية +
1استخدام النظام؛
2باستخدام System.Xml؛
3باستخدام System.Web؛
4namespacesolucky
5 {
6 /**//// <الملخص>
7 /// يجب استخدام تعبير XPATH للحصول على العقدة المقابلة
8 /// للحصول على معلومات حول xpath، راجع:
9 /// </summary>
10 فئة عامة MyXml
11 {
12 متغير # المنطقة متغير
13 /**//// <الملخص>
14 ///نوع المسار الذي يوجد به ملف xml
15 /// </الملخص>
16 /// <remarks>نوع المسار الذي يوجد به ملف xml</remarks>
17 التعداد العام enumXmlPathType
18 {
19 /**//// <الملخص>
20 /// المسار المطلق
21 /// </الملخص>
22 المسار المطلق،
23 /**//// <الملخص>
24 /// المسار الظاهري
25 /// </summary>
26المسار الظاهري
27}
28
29 سلسلة خاصة xmlFilePath؛
30 enumXmlPathType الخاص xmlFilePathType;
31 خاص XmlDocument xmlDoc = new XmlDocument();
32 #المنطقة
33
34
35 عقار#عقارات المنطقة
36 /**//// <الملخص>
37 /// مسار الملف
38 /// </summary>
39 /// <remarks>مسار الملف</remarks>
40 سلسلة عامة XmlFilePath
41 {
42 الحصول على
43 {
44 إرجاع this.xmlFilePath;
45 }
46 مجموعة
47 {
48 xmlFilePath = value;
49
50 }
51 }
52
53 /**//// <الملخص>
54 /// نوع مسار الملف
55 /// </summary>
56 التعداد العام XmlPathType XmlFilePathTyp
57 {
58 مجموعة
59 {
60 xmlFilePathType = value;
61 }
62 }
63 #المنطقة
64
65 منشئ #منطقة منشئ
66 /**//// <الملخص>
67 ///
68 /// </summary>
69 /// <param name="tempXmlFilePath"></param>
70 MyXml العام (سلسلة 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 /**//// <الملخص>
83 /// منشئ
84 /// </summary>
85 /// <param name="tempXmlFilePath">مسار الملف</param>
86 /// <param name="tempXmlFilePathType">النوع</param>
87 MyXml العامة (سلسلة tempXmlFilePath، enumXmlPathType tempXmlFilePathType)
88 {
89 //
90 // TODO: أضف منطق المنشئ هنا
91 //
92 this.xmlFilePathType = tempXmlFilePathType;
93 this.xmlFilePath = tempXmlFilePath;
94 GetXmlDocument();
95 }
96 #المنطقة
97
98
99 /**////<الملخص>
100 ///احصل على فئة كيان XmlDocument
101 ///</summary>
102 /// <returns>مثيل xmldocument لملف وصف XML المحدد</returns>
103 XmlDocument الخاص GetXmlDocument()
104 {
105 XmlDocument doc=null;
106
107 إذا (هذا.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 += new XmlNodeChangedEventHandler(this.nodeUpdateEvent);
124 xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent);
125 xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent);
126 إرجاع xmlDoc;
127 }
128
129 اقرأ قيمة السمة المحددة للعقدة المحددة # المنطقة اقرأ قيمة السمة المحددة للعقدة المحددة
130 /**//// <الملخص>
131 /// الوظيفة:
132 /// اقرأ قيمة السمة المحددة للعقدة المحددة
133 /// </summary>
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.Attributes;
147
148 ل(int i=0;i<xmlAttr.Count; i++)
149 {
150 إذا (xmlAttr.Item(i).Name == strAttribute)
151 {
152 strReturn = xmlAttr.Item(i).Value;
153 استراحة؛
154 }
155 }
156 }
157 }
158 صيد (XmlException XML)
159 {
160 رمية XML؛
161 }
162 عودة strReturn؛
163 }
164 #المنطقة
165
166
167 اقرأ قيمة العقدة المحددة #المنطقة اقرأ قيمة العقدة المحددة
168 /**//// <الملخص>
169 /// الوظيفة:
170 /// اقرأ قيمة العقدة المحددة
171 /// </summary>
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 XML)
186 {
187 رمي XML؛
188 }
189 عودة strReturn؛
190 }
191 #المنطقة
192
193 تعيين قيمة العقدة # المنطقة تعيين قيمة العقدة
194 /**//// <الملخص>
195 /// الوظيفة:
196 /// تعيين قيمة العقدة
197 /// </summary>
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 XML)
221 {
222 رمي إكسمل؛
223 }
224 }
225 #المنطقة
226
227 قم بتعيين قيمة السمة للعقدة # المنطقة قم بتعيين قيمة السمة للعقدة
228 /**//// <الملخص>
229 /// الوظيفة:
230 ///قم بتعيين قيمة السمة للعقدة
231 /// </summary>
232 /// <param name="xmlNodePath">اسم العقدة</param>
233 /// <param name="xmlNodeAttribute">اسم السمة</param>
234 /// <param name="xmlNodeAttributeValue">قيمة السمة</param>
235 الفراغ العام SetXmlNodeAttributeValue(string xmlNodePath,string xmlNodeAttribute,string 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.Attributes;
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.Attributes;
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 XML)
274 {
275 رمية XML؛
276 }
277 }
278 #المنطقة
279
280 إضافة #منطقة إضافة
281 /**//// <الملخص>
282 /// احصل على العنصر الجذري لملف XML
283 /// </summary>
284 XmlNode GetXmlRoot() العامة
285 {
286 إرجاع xmlDoc.DocumentElement;
287 }
288
289 /**//// <الملخص>
290 /// أضف عقدة أصل تحت العقدة الجذرية
291 /// </summary>
292 AddParentNode الفراغ العام (سلسلة ParentNode)
293 {
294 محاولة
295 {
296 XmlNode root = GetXmlRoot();
297 XmlNodeparentXmlNode = xmlDoc.CreateElement(parentNode);
298 root.AppendChild(parentXmlNode);
299 }
300 صيد (XmlException XML)
301 {
302 رمي إكسمل؛
303 }
304 }
305
306 /**//// <الملخص>
307 /// أدخل عقدة فرعية في العقدة الأصلية الموجودة
308 /// </الملخص>
309 /// <param name="parentNodePath">العقدة الأصلية</param>
310 /// <param name="childNodePath">اسم نقطة البايت</param>
311 AddChildNode الفراغ العام (سلسلة ParentNodePath، سلسلة Childnodename)
312 {
313 محاولة
314 {
315 XmlNodeparentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
316 if(!((parentXmlNode)==null))//إذا كانت هذه العقدة موجودة
317 {
318 XmlNode ChildXmlNode = xmlDoc.CreateElement(childnodename);
319 بارنتXmlNode.AppendChild( ChildXmlNode );
320 }
321 آخر {// إذا لم يكن موجودا، أضف العقدة الأصلية
322 //this.GetXmlRoot().AppendChild(childXmlNode);
323 }
324
325 }
326 صيد (XmlException XML)
327 {
328 رمي XML;
329 }
330 }
331
332 /**//// <الملخص>
333 /// إضافة سمات إلى العقدة
334 /// </summary>
335 /// <param name="NodePath">مسار العقدة</param>
336 /// <param name="NodeAttribute">اسم السمة</param>
337 AddAttribute الفراغ العام (سلسلة NodePath، سلسلة NodeAttribute)
338 {
339 publicAddAttribute(NodePath,NodeAttribute"");
340 }
341 /**//// <الملخص>
342 ///
343 /// </summary>
344 /// <param name="NodePath"></param>
345 /// <param name="NodeAttribute"></param>
346 /// <param name="NodeAttributeValue"></param>
347 خاص باطل PrivateAddAttribute (سلسلة NodePath، سلسلة NodeAttribute، سلسلة NodeAttributeValue)
348 {
349 محاولة
350 {
351 XmlNodeNodePath = 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 XML)
360 {
361 رمي إكس إم إل؛
362 }
363 }
364 /**//// <الملخص>
365 /// إضافة سمات إلى العقدة ودفع القيمة
366 /// </summary>
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 #المنطقة
375
376 حذف # المنطقة حذف
377 /**//// <الملخص>
378 /// حذف سمة العقدة
379 /// </summary>
380 /// <param name="NodePath">تعبير xpath حيث توجد العقدة</param>
381 /// <param name="NodeAttribute">اسم السمة</param>
382 حذف الفراغ العام (سلسلة NodePath، سلسلة NodeAttribute)
383 {
384 XmlNodeListNodePath =this.xmlDoc.SelectNodes(NodePath);
385 إذا (!(nodePath==null))
386 {
387 foreach (XmlNode tempxn في nodePath)
388 {
389 XmlAttributeCollection xmlAttr = tempxn.Attributes;
390 ل(int i=0;i<xmlAttr.Count;i++)
391 {
392 إذا (xmlAttr.Item(i).Name == NodeAttribute)
393 {
394 tempxn.Attributes.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 حذف الفراغ العام (سلسلة NodePath، سلسلة NodeAttribute، سلسلة NodeAttributeValue)
409 {
410 XmlNodeListNodePath =this.xmlDoc.SelectNodes(NodePath);
411 إذا (!(nodePath==null))
412 {
413 foreach (XmlNode tempxn في nodePath)
414 {
415 XmlAttributeCollection xmlAttr = tempxn.Attributes;
416 ل(int i=0;i<xmlAttr.Count;i++)
417 {
418 إذا (xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value==NodeAttributeValue)
419 {
420 tempxn.Attributes.RemoveAt(i);
421 استراحة؛
422 }
423 }
424 }
425 }
426 }
427 /**//// <الملخص>
428 /// حذف العقدة
429 /// </summary>
430 /// <param name="tempXmlNode"></param>
431 /// <التعليقات></التعليقات>
432 حذف XmlNode باطل عام(string tempXmlNode){
433 XmlNodeListNodePath =this.xmlDoc.SelectNodes(tempXmlNode);
434 إذا (!(nodePath==null))
435 {
436 foreach(XmlNode xn في العقدةPath)
437 {
438 xn.ParentNode.RemoveChild(xn);
439 }
440 }
441 }
442
443 #المنطقة
444
445 حدث مستند XML# المنطقة حدث مستند XML
446 /**//// <الملخص>
447 ///
448 /// </summary>
449 /// <param name="src"></param>
450 /// <param name="args"></param>
451 عقدة باطلة خاصة (Object src، XmlNodeChangedEventArgs args)
452 {
453 //حفظ الإعدادات
454 SaveXmlDocument();
455 }
456 /**//// <الملخص>
457 ///
458 /// </summary>
459 /// <param name="src"></param>
460 /// <param name="args"></param>
461 عقدة باطلة خاصة (Object src، XmlNodeChangedEventArgs args)
462 {
463 //حفظ الإعدادات
464 SaveXmlDocument();
465 }
466 /**//// <الملخص>
467 ///
468 /// </summary>
469 /// <param name="src"></param>
470 /// <param name="args"></param>
471 عقدة باطلة خاصة (Object src، XmlNodeChangedEventArgs args)
472 {
473 //حفظ الإعدادات
474 SaveXmlDocument();
475 }
476 #المنطقة
477
478 حفظ ملف XML # المنطقة حفظ ملف XML
479 /**//// <الملخص>
480 /// الوظيفة:
481 /// حفظ ملف XML
482 ///
483 /// </summary>
484 الفراغ العام SaveXmlDocument()
485 {
486 محاولة
487 {
488 //حفظ نتائج الإعداد
489 إذا (هذا.xmlFilePathType == enumXmlPathType.AbsolutePath)
490 {
491 سافيكسل(xmlFilePath);
492 }
493 آخر إذا ( this.xmlFilePathType == enumXmlPathType.VirtualPath )
494 {
495 Savexml(HttpContext.Current.Server.MapPath(xmlFilePath));
496 }
497 }
498 صيد (XmlException XML)
499 {
500 رمية XML؛
501 }
502 }
503
504 /**//// <الملخص>
505 /// الوظيفة:
506 /// حفظ ملف XML
507 /// </summary>
508 - SaveXmlDocument الفراغ العام (سلسلة tempXMLFilePath)
509 {
510 محاولة
511 {
512 //حفظ نتائج الإعداد
513 Savexml(tempXMLFilePath);
514 }
515 صيد (XmlException XML)
516 {
517 رمي إكس إم إل؛
518 }
519 }
520 /**//// <الملخص>
521 ///
522 /// </summary>
523 /// <param name="filepath"></param>
524 Savexml باطل خاص (مسار ملف السلسلة)
525 {
526 xmlDoc.Save(filepath);
527 }
528
529 #المنطقة
530
531 }
532
533}
534
535