XML 쉽게 읽고 접근하기 C# .NET(C샵)

가끔 프로그램을 유지보수 하다 보면 종종 XML 을 읽어야 할때가 있습니다.

C# 은 그래도 꽤 간편한 언어에 속하는 편이라서 XML 을 로드해서 처리하기가
매우 쉽고 간단하게 됩니다~

C#에서 XML 을 읽어 올때 주로 사용하되는게 XmlTextReaderXmlDocument 가 있습니다.

이번 포스트에서는 XmlDocument를 이용하여 XML을 로드하고 그중 자식노드 및 특정 자식 노드값을
읽어서 배치해 보겠습니다.

<?xml version="1.0" encoding="EUC-KR" standalone="yes" ?>
<main>
    <main_node>
        <class>1학년</class>
        <class>2학년</class>
        <class>3학년</class>
        <class_name>
            <code>예술반</code>
            <code_name>미술</code_name>
            <code_count>10명</code_count>
        <class_teacher>
            <teacher>홍길동 선생</teacher>
            <teacher_sex>남자</teacher_sex>
        </class_teacher>
            <school>
                <code>12345</code>
                <code_name>예술학교</code_name>
            </school>
         </class_name>
     </main_node>
</main>

위와 같은 XML을 불러 올때 고민스러운건 중복된 태그명이 존재한다는거와 자식노드들이 있다는 겁니다
물론 방법론적으론 자식노드 리스트를 작성하고 ChildNode 를 사용하여 for 문으로 돌려서 구할 수 있지만
아무래도 소스가 복잡해지고 무엇보다 파싱하기가 귀찮지요~~ ㅎ

다행히 csharp-examples.net 에 Jan Slama 란 분히 저같은 사람을 위해 간단히 파싱하는 법을 올려놨네요~ ^^;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;

namespace xml_load {

   public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        
        private void Form1_Load(object sender, EventArgs e)
        {
            string url = @"http://www.Xml주소/XML파일.xml"; //xml 을 불러올 주소 (로컬은 c:\\디렉토리명 이 되겠지요~)
            
            try
            {
                XmlDocument xml = new XmlDocument ();
               
                xml.Load(url);

                XmlNodeList xnList = xml.SelectNodes( "/main/main_node/class_name" ); //접근할 노드

               
                foreach (XmlNode xn in xnList)
                {

                    string part1 = xn["code"].InnerText; //예술반 불러오기
                    string part2 = xn["code_name"].InnerText; //예술반 code_name 불러오기
                    string part3 = xn["class_teacher"]["teacher"].InnerText; //선생님 이름
                    string part4 = xn["school"]["code"].InnerText; //학교노드의 code 불러오기
                    string part5 = xn["school"]["code_name"].InnerText; //학교노드의 code_name 불러오기

                    richTextBox1.AppendText(part1 + " | " + part2 + " | " + part3 + " | " + part4 + " | " + part5);

                }

            }

            catch (ArgumentException ex)
            {

               MessageBox.Show("XML 문제 발생\r\n" + ex);

            }

        }
    }
}


결과는


1 2 3 4 5 6 7 8 9 10 다음