블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

[퍼온글] : http://goodhelper.egloos.com/1916101

가끔 프로그램을 유지보수 하다 보면 종종 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.netJan 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);

}

}
}
}

반응형

'Programming > C#' 카테고리의 다른 글

Windows Forms FAQ  (0) 2011.10.25
[링크] WinForm Study  (0) 2011.10.25
[C#] xml 파싱  (0) 2011.10.25
C#으로 xml 처리하기  (0) 2011.10.25
현재 Process의 한영 정보 얻기  (0) 2011.10.10
Posted by blueasa
, |