예전부터 XML 파일을 운용하기 위한 클래스를 작성하고 싶었는데, 오늘 인터넷에서 검색해보니 이미 작성한 비슷한 클래스가 있어서 확장하고 수정해서 드디어 초보자들이 참고할 수 있는 코드가 되었습니다.
//
이 클래스에서는 XML 이벤트가 사용됩니다. 이 클래스에서 노드를 검색하려면 xpath 표현식을 사용해야 합니다. xpath 표현식을 이해하지 못하는 경우 내 컬렉션의 다른 기사인 +XML 파일 작업: [Xpath 학습]XPath를 확인하세요. 가장 인기 있는 튜토리얼 +
1시스템 사용;
2System.Xml을 사용합니다.
3System.Web 사용;
4네임스페이스solucky
5{
6 /**//// <요약>
7 /// 해당 노드를 얻으려면 XPATH 표현식을 사용해야 합니다.
8 /// xpath에 대한 자세한 내용은 다음을 참조하세요.
9 /// </summary>
10 공개 클래스 MyXml
11 {
12 변수#지역 변수
13 /**//// <요약>
14 ///xml 파일이 위치한 경로 유형
15 /// </summary>
16 /// <remarks>xml 파일이 위치한 경로 유형</remarks>
17 공개 열거형 enumXmlPathType
18 {
19 /**//// <요약>
20 /// 절대 경로
21 /// </summary>
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 return this.xmlFilePath;
45 }
46세트
47 {
48 xml파일경로 = 값;
49
50 }
51 }
52
53 /**//// <요약>
54 /// 파일 경로 유형
55 /// </summary>
56 공개 enumXmlPathType XmlFilePathTyp
57 {
58개 세트
59 {
60 xmlFilePathType = 값;
61 }
62 }
63 #끝지역
64
65 생성자 #region 생성자
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 GetXml문서();
95 }
96 #끝지역
97
98
99 /**////<요약>
100 ///XmlDocument 엔터티 클래스 가져오기
101 ///</summary>
102 /// <returns>지정된 XML 설명 파일의 xmldocument 인스턴스</returns>
103 비공개 XmlDocumentGetXmlDocument()
104 {
105 XmlDocument 문서=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 문서 반환;
116 }
117
118 개인 XmlDocument GetXmlDocumentFromFile(string 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 지정된 노드의 지정된 속성 값을 읽습니다. #region 지정된 노드의 지정된 속성 값을 읽습니다.
130 /**//// <요약>
131 /// 기능:
132 /// 지정된 노드의 지정된 속성 값을 읽습니다.
133 /// </summary>
134 /// <param name="strNode">노드 이름</param>
135 /// <param name="strAttribute">이 노드의 속성</param>
136 /// <반환></반환>
137 공개 문자열 GetXmlNodeAttributeValue(string strNode,string strAttribute)
138 {
139 문자열 strReturn = "";
140번 시도
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).값;
153 휴식;
154 }
155 }
156 }
157 }
158 catch(XmlException xmle)
159 {
160 던져 xmle;
161 }
162 반환 strReturn;
163 }
164 #끝지역
165
166
167 지정된 노드의 값을 읽습니다. #region 지정된 노드의 값을 읽습니다.
168 /**//// <요약>
169 /// 기능:
170 /// 지정된 노드의 값을 읽습니다.
171 /// </summary>
172 /// <param name="strNode">노드 이름</param>
173 /// <반환></반환>
174 공개 문자열 GetXmlNodeValue(문자열 strNode)
175 {
176 문자열 strReturn = 문자열.Empty;
177
178 시도
179 {
180 //경로를 기반으로 노드 가져오기
181 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
182 if (!(xmlNode==null))
183 strReturn = xmlNode.InnerText;
184}
185 catch(XmlException xmle)
186 {
187 xmle을 던져;
188 }
189 반환 strReturn;
190 }
191 #끝지역
192
193 노드 값 설정 #region 노드 값 설정
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 if (!(xmlNode==null))
207 {
208 foreach(xmlNode의 XmlNode xn)
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 XML을 던져;
223 }
224 }
225 #끝지역
226
227 노드의 속성값을 설정합니다. #region 노드의 속성값을 설정합니다.
228 /**//// <요약>
229 /// 기능:
230 ///노드의 속성값 설정
231 /// </summary>
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 if (!(xmlNode==null))
242 {
243 foreach(xmlNode의 XmlNode xn)
244 {
245 XmlAttributeCollection xmlAttr = xn.속성;
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 휴식;
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 휴식;
268 }
269 }
270 }
271*/
272 }
273 catch(XmlException xmle)
274 {
275 xme을 던져;
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 루트 = GetXmlRoot();
297 XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode);
298 root.AppendChild(parentXmlNode);
299 }
300 catch(XmlException xmle)
301 {
302 xmle을 던졌습니다.
303 }
304 }
305
306 /**//// <요약>
307 /// 기존 상위 노드에 하위 노드를 삽입합니다.
308 /// </summary>
309 /// <param name="parentNodePath">부모 노드</param>
310 /// <param name="childNodePath">바이트 포인트 이름</param>
311 공개 무효 AddChildNode(문자열 parentNodePath,문자열 childnodename)
312 {
313 시도
314 {
315 XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath);
316 if(!((parentXmlNode)==null))//이 노드가 존재하는 경우
317 {
318 XmlNode childXmlNode = xmlDoc.CreateElement(childnodename);
319 parentXmlNode.AppendChild( childXmlNode );
320 }
321 else{//존재하지 않으면 상위 노드를 추가하세요.
322 //this.GetXmlRoot().AppendChild(childXmlNode);
323 }
324
325 }
326 catch(XmlException xmle)
327 {
328 xmle을 던졌습니다.
329 }
330 }
331
332 /**//// <요약>
333 /// 노드에 속성 추가
334 /// </summary>
335 /// <param name="NodePath">노드 경로</param>
336 /// <param name="NodeAttribute">속성 이름</param>
337 공공 무효 AddAttribute(문자열 NodePath, 문자열 NodeAttribute)
338 {
339 privateAddAttribute(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 XmlNode nodePath = xmlDoc.SelectSingleNode(NodePath);
352 if (!(nodePath==null))
353 {
354 XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
355 노드속성.값=노드속성값;
356 nodePath.Attributes.Append(nodeAttribute);
357 }
358 }
359 catch(XmlException xmle)
360 {
361 xmle을 던졌습니다.
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 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
385 if (!(nodePath==null))
386 {
387 foreach(nodePath의 XmlNode tempxn)
388 {
389 XmlAttributeCollection xmlAttr = tempxn.Attributes;
390 for(int i=0; i<xmlAttr.Count; i++)
391 {
392 if (xmlAttr.Item(i).Name == NodeAttribute)
393 {
394 tempxn.속성.RemoveAt(i);
395 브레이크;
396 }
397 }
398 }
399 }
400 }
401
402 /**//// <요약>
403 /// 속성 값이 주어진 값과 같을 때 노드를 삭제합니다.
404 /// </summary>
405 /// <param name="NodePath">노드가 위치한 xpath 표현식</param>
406 /// <param name="NodeAttribute">속성</param>
407 /// <param name="NodeAttributeValue">값</param>
408 공개 무효 삭제 속성( 문자열 NodePath , 문자열 NodeAttribute , 문자열 NodeAttributeValue)
409 {
410 XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);
411 if (!(nodePath==null))
412 {
413 foreach(nodePath의 XmlNode tempxn)
414 {
415 XmlAttributeCollection xmlAttr = tempxn.Attributes;
416 for(int i=0; i<xmlAttr.Count; i++)
417 {
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 /// </summary>
430 /// <param name="tempXmlNode"></param>
431 /// <비고></비고>
432 공개 무효 삭제XmlNode(문자열 tempXmlNode){
433 XmlNodeList nodePath =this.xmlDoc.SelectNodes(tempXmlNode);
434 if (!(nodePath==null))
435 {
436 foreach(nodePath의 XmlNode xn)
437 {
438 xn.ParentNode.RemoveChild(xn);
439 }
440 }
441 }
442
443 #끝지역
444
445 XML 문서 이벤트#region XML 문서 이벤트
446 /**//// <요약>
447 ///
448 /// </summary>
449 /// <param name="src"></param>
450 /// <param name="args"></param>
451 개인 무효 nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)
452 {
453 //설정 저장
454 저장Xml문서();
455 }
456 /**//// <요약>
457 ///
458 /// </summary>
459 /// <param name="src"></param>
460 /// <param name="args"></param>
461 개인 무효 nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)
462 {
463 //설정 저장
464 저장Xml문서();
465 }
466 /**//// <요약>
467 ///
468 /// </summary>
469 /// <param name="src"></param>
470 /// <param name="args"></param>
471 개인 무효 nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)
472 {
473 //설정 저장
474 저장Xml문서();
475 }
476 #끝지역
477
478 XML 파일 저장 #region XML 파일 저장
479 /**//// <요약>
480 /// 기능:
481 /// XML 파일 저장
482 ///
483 /// </summary>
484 공개 무효 SaveXmlDocument()
485 {
486 시도
487 {
488 //설정 결과 저장
489 if( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
490 {
491 저장xml(xml파일경로);
492 }
493 else if( this.xmlFilePathType == enumXmlPathType.VirtualPath )
494 {
495 저장xml(HttpContext.Current.Server.MapPath(xmlFilePath));
496 }
497 }
498 catch(XmlException xmle)
499 {
500 던져 xmle;
501 }
502 }
503
504 /**//// <요약>
505 /// 기능:
506 /// XML 파일 저장
507 /// </summary>
508 공개 무효 SaveXmlDocument(문자열 tempXMLFilePath)
509 {
510 시도
511 {
512 //설정 결과 저장
513 저장xml(tempXML파일경로);
514 }
515 catch(XmlException xmle)
516 {
517 xmle을 던졌습니다.
518 }
519 }
520 /**//// <요약>
521 ///
522 /// </summary>
523 /// <param name="파일 경로"></param>
524 개인 무효 Savexml(문자열 파일 경로)
525 {
526 xmlDoc.저장(파일 경로);
527 }
528
529 #끝지역
530
531 }
532
533}
534
535