Ich wollte schon immer eine Klasse zum Bearbeiten von XML-Dateien schreiben und habe heute eine ähnliche Klasse gefunden, die ich bereits geschrieben hatte, und schließlich wurde daraus der folgende Code als Referenz.
//
In dieser Klasse werden XML-Ereignisse verwendet. Für die Suche nach Knoten in dieser Klasse müssen XPath-Ausdrücke verwendet werden. Wenn Sie XPath-Ausdrücke nicht verstehen, können Sie sich einen anderen Artikel in meiner Sammlung ansehen: beliebtestes Tutorial +
1using System;
2using System.Xml;
3mit System.Web;
4namespacesolucky
5{
6 /**////
7 /// XPATH-Ausdruck muss verwendet werden, um den entsprechenden Knoten zu erhalten
8 /// Informationen zu xpath finden Sie unter:
9 ///
10 öffentliche Klasse MyXml
11 {
12 Variable#region Variable
13 /**////
14 ///Der Pfadtyp, in dem sich die XML-Datei befindet
15 ///
16 ///
17 öffentliche Enumeration enumXmlPathType
18 {
19 /**////
20 /// Absoluter Pfad
21 ///
22AbsoluterPfad,
23 /**////
24 /// virtueller Pfad
25 ///
26VirtualPath
27}
28
29 private Zeichenfolge xmlFilePath;
30 private enumXmlPathType xmlFilePathType;
31 privates XmlDocument xmlDoc = new XmlDocument();
32 #endregion
33
34
35 Eigenschaften#regionale Eigenschaften
36 /**////
37 /// Dateipfad
38 ///
39 ///
40 öffentliche Zeichenfolge XmlFilePath
41 {
42 erhalten
43 {
44 return this.xmlFilePath;
45 }
46 Sätze
47 {
48 xmlFilePath = value;
49
50 }
51 }
52
53 /**////
54 /// Dateipfadtyp
55 ///
56 public enumXmlPathType XmlFilePathTyp
57 {
58 Satz
59 {
60 xmlFilePathType = value;
61 }
62 }
63 #endregion
64
65 Konstruktor #region Konstruktor
66 /**////
67 ///
68 ///
69 ///
70 public MyXml(string tempXmlFilePath)
71 {
72 //
73 // TODO: Konstruktorlogik hier hinzufügen
74 //
75
76 this.xmlFilePathType = enumXmlPathType.VirtualPath;
77 this.xmlFilePath = tempXmlFilePath;
78 GetXmlDocument();
79 //xmlDoc.Load(xmlFilePath);
80}
81
82 /**////
83 /// Konstrukteur
84 ///
85 /// Dateipfad
86 /// Typ
87 public MyXml( string tempXmlFilePath , enumXmlPathType tempXmlFilePathType )
88 {
89 //
90 // TODO: Konstruktorlogik hier hinzufügen
91 //
92 this.xmlFilePathType = tempXmlFilePathType;
93 this.xmlFilePath = tempXmlFilePath;
94 GetXmlDocument();
95 }
96 #endregion
97
98
99 /**////
100 ///Holen Sie sich die XmlDocument-Entitätsklasse
101 ///
102 ///
103 privates 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 Rücksendedokument;
116 }
117
118 privates XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath)
119 {
120 string xmlFileFullPath = tempXmlFilePath;
121 xmlDoc.Load(xmlFileFullPath);
122 //Ereignisverarbeitung definieren
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 Lesen Sie den angegebenen Attributwert des angegebenen Knotens. #region Lesen Sie den angegebenen Attributwert des angegebenen Knotens
130 /**////
131 /// Funktion:
132 /// Den angegebenen Attributwert des angegebenen Knotens lesen
133 ///
134 /// Knotenname
135 /// Attribute dieses Knotens
136 ///
137 öffentlicher String GetXmlNodeAttributeValue(string strNode,string strAttribute)
138 {
139 string strReturn = "";
140 Versuche
141 {
142 // Knoten gemäß dem angegebenen Pfad abrufen
143 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
144 if (!(xmlNode==null))
145 {//Rufen Sie die Attribute des Knotens ab und geben Sie die erforderlichen Attributwerte aus
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 Pause;
154 }
155 }
156 }
157 }
158 Catch(XmlException xmle)
159 {
160-Wurf-XMLE;
161 }
162 return strReturn;
163 }
164 #endregion
165
166
167 Lesen Sie den Wert des angegebenen Knotens. #region Lesen Sie den Wert des angegebenen Knotens
168 /**////
169 /// Funktion:
170 /// Den Wert des angegebenen Knotens lesen
171 ///
172 /// Knotenname
173 ///
174 öffentlicher String GetXmlNodeValue(string strNode)
175 {
176 string strReturn = String.Empty;
177
178 versuchen
179 {
180 //Knoten basierend auf dem Pfad abrufen
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 Knotenwert festlegen #region Knotenwert festlegen
194 /**////
195 /// Funktion:
196 /// Knotenwert festlegen
197 ///
198 /// Der Name des Knotens
199 /// Knotenwert
200 public void SetXmlNodeValue(string xmlNodePath,string xmlNodeValue)
201 {
202 versuchen
203 {
204 //Sie können für Knoten, die die Bedingungen erfüllen, stapelweise bezahlen.
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 * Knoten gemäß dem angegebenen Pfad abrufen
215 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath);
216 //Knotenwert festlegen
217 if (!(xmlNode==null))
218 xmlNode.InnerText = xmlNodeValue;*/
219 }
220 Catch(XmlException xmle)
221 {
222 throw xmle;
223 }
224 }
225 #endregion
226
227 Legen Sie den Attributwert des Knotens fest. #region Legen Sie den Attributwert des Knotens fest
228 /**////
229 /// Funktion:
230 ///Legen Sie den Attributwert des Knotens fest
231 ///
232 /// Knotenname
233 /// Attributname
234 /// Attributwert
235 public void SetXmlNodeAttributeValue(string xmlNodePath,string xmlNodeAttribute,string xmlNodeAttributeValue)
236 {
237 versuchen
238 {
239 //Sie können Attribute qualifizierter Knoten stapelweise bezahlen
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
248 if ( xmlAttr.Item(i).Name == xmlNodeAttribute )
249 {
250 xmlAttr.Item(i).Value = xmlNodeAttributeValue;
251 Pause;
252 }
253 }
254 }
255 }
256 /**//*Einzelner Knoten
257 // Knoten gemäß dem angegebenen Pfad abrufen
258 XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath);
259 if (!(xmlNode==null))
260 {// Rufen Sie die Attribute des Knotens ab und geben Sie die erforderlichen Attributwerte aus
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 Pause;
268 }
269 }
270 }
271 */
272 }
273 Catch(XmlException xmle)
274 {
275 throw xmle;
276 }
277 }
278 #endregion
279
280 #Region hinzufügen Hinzufügen
281 /**////
282 /// Holen Sie sich das Stammelement der XML-Datei
283 ///
284 öffentlicher XmlNode GetXmlRoot()
285 {
286 return xmlDoc.DocumentElement;
287 }
288
289 /**////
290 /// Fügen Sie einen übergeordneten Knoten unter dem Wurzelknoten hinzu
291 ///
292 public void AddParentNode(string parentNode)
293 {
294 versuchen
295 {
296 XmlNode root = GetXmlRoot();
297 XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode);
298 root.AppendChild(parentXmlNode);
299 }
300 Catch(XmlException xmle)
301 {
302 xmle werfen;
303 }
304 }
305
306 /**////
307 /// Fügen Sie einen untergeordneten Knoten in einen vorhandenen übergeordneten Knoten ein
308 ///
309 /// Übergeordneter Knoten
310 /// Bytepunktname
311 public void AddChildNode(string parentNodePath,string childnodename)
312 {
313 versuchen
314 {
315 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
316 if(!((parentXmlNode)==null))//Wenn dieser Knoten existiert
317 {
318 XmlNode childXmlNode = xmlDoc.CreateElement(childnodename);
319 parentXmlNode.AppendChild( childXmlNode );
320 }
321 else{//Wenn es nicht existiert, fügen Sie den übergeordneten Knoten hinzu
322 //this.GetXmlRoot().AppendChild(childXmlNode);
323 }
324
325 }
326 Catch(XmlException xmle)
327 {
328 throw xmle;
329 }
330 }
331
332 /**////
333 /// Attribute zu einem Knoten hinzufügen
334 ///
335 /// Knotenpfad
336 /// Attributname
337 public void AddAttribute(string NodePath, string NodeAttribute)
338 {
339 privateAddAttribute(NodePath,NodeAttribute,"");
340 }
341 /**////
342 ///
343 ///
344 ///
345 ///
346 ///
347 private void privateAddAttribute(string NodePath, string NodeAttribute,string NodeAttributeValue)
348 {
349 Versuch
350 {
351 XmlNode nodePath = xmlDoc.SelectSingleNode(NodePath);
352 if (!(nodePath==null))
353 {
354 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
355 nodeAttribute.Value=NodeAttributeValue;
356 nodePath.Attributes.Append(nodeAttribute);
357 }
358 }
359 Catch(XmlException xmle)
360 {
361 throw xmle;
362 }
363 }
364 /**////
365 /// Attribute zu einem Knoten hinzufügen und Wert zahlen
366 ///
367 /// Knoten
368 /// Attributname
369 /// Attributwert
370 public void AddAttribute(string NodePath, string NodeAttribute,string NodeAttributeValue)
371 {
372 privateAddAttribute(NodePath,NodeAttribute,NodeAttributeValue);
373 }
374 #endregion
375
376 Löschen #region Löschen
377 /**////
378 /// Ein Attribut des Knotens löschen
379 ///
380 /// xpath-Ausdruck, wo sich der Knoten befindet
381 /// Attributname
382 public void DeleteAttribute(string NodePath, string NodeAttribute)
383 {
384 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
385 if (!(nodePath==null))
386 {
387 foreach (XmlNode tempxn in 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 Pause;
396 }
397 }
398 }
399 }
400 }
401
402 /**////
403 /// Einen Knoten löschen, wenn sein Attributwert dem angegebenen Wert entspricht
404 ///
405 /// xpath-Ausdruck, wo sich der Knoten befindet
406 /// Attribut
407 /// Wert
408 public void DeleteAttribute( string NodePath , string NodeAttribute , string NodeAttributeValue)
409 {
410 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
411 if (!(nodePath==null))
412 {
413 foreach (XmlNode tempxn in 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 Pause;
422 }
423 }
424 }
425 }
426 }
427 /**////
428 /// Knoten löschen
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 in nodePath)
437 {
438 xn.ParentNode.RemoveChild(xn);
439 }
440 }
441 }
442
443 #endregion
444
445 XML-Dokumentereignis#region XML-Dokumentereignis
446 /**////
447 ///
448 ///
449 ///
450 ///
451 private void nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)
452 {
453 //Einstellungen speichern
454 SaveXmlDocument();
455 }
456 /**////
457 ///
458 ///
459 ///
460 ///
461 private void nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)
462 {
463 //Einstellungen speichern
464 SaveXmlDocument();
465 }
466 /**////
467 ///
468 ///
469 ///
470 ///
471 private void nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)
472 {
473 //Einstellungen speichern
474 SaveXmlDocument();
475 }
476 #endregion
477
478 XML-Datei speichern #region XML-Datei speichern
479 /**////
480 /// Funktion:
481 /// XML-Datei speichern
482 ///
483 ///
484 public void SaveXmlDocument()
485 {
486 Versuch
487 {
488 //Speichern Sie die Einstellungsergebnisse
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 xmle)
499 {
500-Wurf-XMLE;
501 }
502 }
503
504 /**////
505 /// Funktion:
506 /// XML-Datei speichern
507 ///
508 public void SaveXmlDocument(string tempXMLFilePath)
509 {
510 versuchen
511 {
512 //Speichern Sie die Einstellungsergebnisse
513 Savexml(tempXMLFilePath);
514 }
515 Catch(XmlException xmle)
516 {
517 throw xmle;
518 }
519 }
520 /**////
521 ///
522 ///
523 ///
524 private void Savexml(string filepath)
525 {
526 xmlDoc.Save(filepath);
527 }
528
529 #endregion
530
531 }
532
533}
534
535