Я всегда хотел написать класс для работы с XML-файлами. Сегодня я поискал в Интернете и нашел аналогичный класс, который я уже написал и расширил, и, наконец, он стал следующим кодом для новичков.
//
В этом классе используются XML-события. Для поиска узлов в этом классе необходимо использовать выражения xpath. Если вы не понимаете выражения xpath, вы можете просмотреть другую статью из моей коллекции: +XML-операция с файлом: [Изучение xpath]XPath. самый популярный учебник +
1использование системы;
2использование System.Xml;
3использование System.Web;
4namespacesolucky
5{
6 /**//// <сводка>
7 /// Выражение XPATH должно использоваться для получения соответствующего узла
8 /// Информацию о xpath см.:
9 /// сводка>
10 общедоступный класс MyXml
11 {
12 Переменная#регион Переменная
13 /**//// <краткое содержание>
14 ///Тип пути, по которому находится XML-файл
15 ///
16 ///
17 общедоступное перечисление enumXmlPathType
18 {
19 /**//// <краткое содержание>
20 /// Абсолютный путь
21 ///
22Абсолютный Путь,
23 /**//// <краткое содержание>
24 /// виртуальный путь
25 ///
26Виртуальный Путь
27}
28
29 частная строка xmlFilePath;
30 частный enumXmlPathType xmlFilePathType;
31 частный XmlDocument xmlDoc = новый XmlDocument();
32 #конечныйрегион
33
34
35 объектов#объекты в регионе
36 /**//// <краткое содержание>
37 /// Путь к файлу
38 ///
39 ///
40 общедоступная строка XmlFilePath
41 {
42 получить
43 {
44 вернуть this.xmlFilePath;
45 }
46 комплектов
47 {
48 xmlFilePath = значение;
49
50 }
51 }
52
53 /**//// <краткое содержание>
54 /// Тип пути к файлу
55 ///
56 общедоступное перечислениеXmlPathType XmlFilePathTyp
57 {
58 комплектов
59 {
60 xmlFilePathType = значение;
61 }
62 }
63 #конецрегиона
64
65 Конструктор #region Конструктор
66 /**//// <краткое содержание>
67 ///
68 ///
69 ///
70 общедоступный MyXml (строка tempXmlFilePath)
71 {
72 //
73 // TODO: добавьте сюда логику конструктора
74 //
75
76 this.xmlFilePathType = enumXmlPathType.VirtualPath;
77 this.xmlFilePath = tempXmlFilePath;
78 ПолучитьXmlДокумент();
79 //xmlDoc.Load(xmlFilePath);
80}
81
82 /**//// <краткое содержание>
83 /// Конструктор
84 ///
85 /// Путь к файлу
86 /// Тип
87 общедоступный MyXml (строка tempXmlFilePath, enumXmlPathType tempXmlFilePathType)
88 {
89 //
90 // TODO: добавьте сюда логику конструктора
91 //
92 this.xmlFilePathType = tempXmlFilePathType;
93 this.xmlFilePath = tempXmlFilePath;
94 ПолучитьXmlДокумент();
95 }
96 #конецрегиона
97
98
99 /**////<сводка>
100 ///Получить класс сущности XmlDocument
101 ///сводка>
102 ///
103 частный XmlDocument GetXmlDocument()
104 {
105 XmlDocument doc=null;
106
107 if( this.xmlFilePathType == enumXmlPathType.AbsolutePath)
108 {
109 документ = 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 /// Имя узла
135 /// Атрибуты этого узла
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 for(int i=0;i
150 if (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 возврат стрReturn;
163 }
164 #конечныйрегион
165
166
167 Чтение значения указанного узла #region Чтение значения указанного узла
168 /**//// <сводка>
169 /// Функция:
170 /// Прочитать значение указанного узла
171 ///
172 /// Имя узла
173 /// <возвращается>возвращается>
174 общедоступная строка GetXmlNodeValue (строка strNode)
175 {
176 строка strReturn = String.Empty;
177
178 попытка
179 {
180 //Получаем узлы по пути
181 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
182 если (!(xmlNode==null))
183 стрReturn = xmlNode.InnerText;
184}
185 улов (XmlException xml)
186 {
187 бросок xml;
188 }
189 возврат стрReturn;
190 }
191 #конецрегиона
192
193 Установить значение узла #region Установить значение узла
194 /**//// <краткое содержание>
195 /// Функция:
196 /// Установить значение узла
197 ///
198 /// Имя узла
199 /// Значение узла
200 public void 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 if (!(xmlNode==null))
218 xmlNode.InnerText = xmlNodeValue;*/
219 }
220 улов (XmlException xml)
221 {
222 бросить xml;
223 }
224 }
225 #конечныйрегион
226
227 Установить значение атрибута узла #region Установить значение атрибута узла
228 /**//// <сводка>
229 /// Функция:
230 ///Установим значение атрибута узла
231 ///
232 /// Имя узла
233 /// Имя атрибута
234 /// Значение атрибута
235 public void SetXmlNodeAttributeValue (строка xmlNodePath, строка xmlNodeAttribute, строка xmlNodeAttributeValue)
236 {
237 попытка
238 {
239 //Вы можете оплачивать атрибуты квалифицированных узлов пакетами.
240 XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
241 if (!(xmlNode==null))
242 {
243 foreach(XmlNode xn в xmlNode)
244 {
245 XmlAttributeCollection xmlAttr = xn.Attributes;
246 for(int i=0; i
248 if ( 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 for(int i=0; i
264 if ( 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 ///
284 публичный XmlNode GetXmlRoot()
285 {
286 вернуть xmlDoc.DocumentElement;
287 }
288
289 /**//// <сводка>
290 /// Добавьте родительский узел под корневым узлом
291 ///
292 public void AddParentNode (строка родительского узла)
293 {
294 попытка
295 {
296 Корень XmlNode = GetXmlRoot();
297 XmlNodeparentXmlNode = xmlDoc.CreateElement(parentNode);
298 root.AppendChild(parentXmlNode);
299 }
300 улов (XmlException xml)
301 {
302 бросить xml;
303 }
304 }
305
306 /**//// <сводка>
307 /// Вставляем дочерний узел в существующий родительский узел
308 /// сводка>
309 /// Родительский узел
310 /// имя байтовой точки
311 public void AddChildNode (строка родительского узла, строка имя дочернего узла)
312 {
313 попробовать
314 {
315 XmlNodeparentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
316 if(!((parentXmlNode)==null))//Если этот узел существует
317 {
318 XmlNode childXmlNode = xmlDoc.CreateElement(имя дочернего узла);
319 ParentXmlNode.AppendChild(childXmlNode);
320 }
321 else{//Если он не существует, добавьте родительский узел
322 //this.GetXmlRoot().AppendChild(childXmlNode);
323 }
324
325 }
326 catch (XmlException xml)
327 {
328 бросить xml;
329 }
330 }
331
332 /**//// <сводка>
333 /// Добавляем атрибуты к узлу
334 /// сводка>
335 /// Путь к узлу
336 /// Имя атрибута
337 public void AddAttribute (строка NodePath, строка NodeAttribute)
338 {
339 PrivateAddAttribute(NodePath,NodeAttribute,"");
340 }
341 /**//// <сводка>
342 ///
343 ///
344 ///
345 ///
346 ///
347 Private void 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 catch (XmlException xml)
360 {
361 бросить xml;
362 }
363 }
364 /**//// <сводка>
365 /// Добавьте атрибуты к узлу и заплатите значение
366 /// сводка>
367 /// Узел
368 /// Имя атрибута
369 /// Значение атрибута
370 public void AddAttribute (строка NodePath, строка NodeAttribute, строка NodeAttributeValue)
371 {
372 PrivateAddAttribute(NodePath,NodeAttribute,NodeAttributeValue);
373 }
374 #конечныйрегион
375
376 Удалить #регион Удалить
377 /**//// <сводка>
378 /// Удалить атрибут узла
379 ///
380 /// выражение xpath, в котором расположен узел
381 /// Имя атрибута
382 public void DeleteAttribute (строка NodePath, строка NodeAttribute)
383 {
384 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
385 if (!(nodePath==null))
386 {
387 foreach (XmlNode tempxn в nodePath)
388 {
389 XmlAttributeCollection xmlAttr = tempxn.Attributes;
390 for(int i=0; i
392 if (xmlAttr.Item(i).Name == NodeAttribute)
393 {
394 tempxn.Attributes.RemoveAt(i);
395 перерыв;
396 }
397 }
398 }
399 }
400 }
401
402 /**//// <сводка>
403 /// Удалить узел, когда значение его атрибута равно заданному значению
404 /// сводка>
405 /// выражение xpath, в котором расположен узел
406 /// Атрибут
407 /// значение
408 public void DeleteAttribute(строка NodePath, строка NodeAttribute, строка NodeAttributeValue)
409 {
410 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
411 if (!(nodePath==null))
412 {
413 foreach (XmlNode tempxn в nodePath)
414 {
415 XmlAttributeCollection xmlAttr = tempxn.Attributes;
416 for(int i=0; i
418 if (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 ///
430 ///
431 /// <примечания>примечания>
432 public void DeleteXmlNode(string tempXmlNode){
433 XmlNodeList nodePath =this.xmlDoc.SelectNodes(tempXmlNode);
434 if (!(nodePath==null))
435 {
436 foreach (XmlNode xn в nodePath)
437 {
438 xn.ParentNode.RemoveChild(xn);
439 }
440 }
441 }
442
443 #конечныйрегион
444
445 Событие XML-документа #регион Событие XML-документа
446 /**//// <сводка>
447 ///
448 ///
449 ///
450 ///
451 частный void nodeInsertEvent (Object src, XmlNodeChangedEventArgs args)
452 {
453 //Сохранить настройки
454 СохранитьXmlДокумент();
455 }
456 /**//// <сводка>
457 ///
458 /// сводка>
459 ///
460 ///
461 частный void nodeDeleteEvent (Object src, XmlNodeChangedEventArgs args)
462 {
463 //Сохранить настройки
464 СохранитьXmlДокумент();
465 }
466 /**//// <сводка>
467 ///
468 /// сводка>
469 ///
470 ///
471 Private void nodeUpdateEvent (Object src, XmlNodeChangedEventArgs args)
472 {
473 //Сохранить настройки
474 СохранитьXmlДокумент();
475 }
476 #конечныйрегион
477
478 Сохранить XML-файл #region Сохранить XML-файл
479 /**//// <сводка>
480 /// Функция:
481 /// Сохранить XML-файл
482 ///
483 /// сводка>
484 общественный недействительный SaveXmlDocument()
485 {
486 попытка
487 {
488 //Сохраняем результаты настройки
489 if( this.xmlFilePathType == enumXmlPathType.AbsolutePath)
490 {
491 Savexml(xmlFilePath);
492 }
493 else if( this.xmlFilePathType == enumXmlPathType.VirtualPath)
494 {
495 Savexml(HttpContext.Current.Server.MapPath(xmlFilePath));
496 }
497 }
498 catch (XmlException xml)
499 {
500 бросков xml;
501 }
502 }
503
504 /**//// <сводка>
505 /// Функция:
506 /// Сохранить XML-файл
507 /// сводка>
508 public void SaveXmlDocument (строка tempXMLFilePath)
509 {
510 попытка
511 {
512 //Сохраняем результаты настройки
513 Savexml(tempXMLFilePath);
514 }
515 catch (XmlException xml)
516 {
517 бросить xml;
518 }
519 }
520 /**//// <сводка>
521 ///
522 /// сводка>
523 ///
524 Private void Savexml (строковый путь к файлу)
525 {
526 xmlDoc.Save(путь к файлу);
527 }
528
529 #конечныйрегион
530
531 }
532
533}
534
535