IT_Programming/LINQ

[C#3.0_Linq] Linq를 이용하여 XML 데이터 읽어 오기

JJun ™ 2009. 6. 26. 18:26



 

참고

: http://cafe.daum.net/aspdotnet (심재운님 자료)

http://www.hoons.kr/ (훈스 닷넷)




 

[실행화면]

 

 

- TestFile.xml 파일

 

 

================================================================================================

 

[소스코드]

 

- LinqTest.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq; // Linq를 이용해서 XML파일의 데이터를 받아오는데 사용

 

namespace LinqFromXML
{
    class LinqTest
    {
        private XDocument xmlDoc;
        private List<string> list;
       
        public LinqTest(string filename) // 파일의 경로를 받아
        {
            xmlDoc = XDocument.Load(filename); // XML 파일을 로드한다. (예외 처리 생략)
            list = new List<string>();
        }

 

        // var는 지역변수로 쓸수 밖에 없으므로, 함수로 리턴하려면 다른 방식으로 리턴을 해야한다.

        // 여기에서는 List에 담아서 컬렉션을 리턴했다.

        public List<string> getXMLData()
        {

            // Linq
            var tutorials = from tutorial in xmlDoc.Descendants("Tutorial")
                            select new
                            {
                                Author = tutorial.Element("Author").Value,
                                Title = tutorial.Element("Title").Value,
                                Date = tutorial.Element("Date").Value,
                            };


            // Linq에서 얻은 XML 데이터를 List(컬렉션)에 추가한다.           
            foreach (var data in tutorials)
            { 
                list.Add(data.ToString());
            }  

              

            return list; // List 반환
        }

    }
}

 

-------------------------------------------------------------------------------------------------

 

- main (Program.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

 

namespace LinqFromXML
{
    class Program
    {       
        static void Main(string[] args)
        {

            string filePath = "C:\\Documents and Settings\\kjbk\\My Documents\\Visual Studio

                                        2008\\Projects\\LinqFromXML\\LinqFromXML\\TestFile.xml";


            LinqTest test = new LinqTest(filePath);

 

            Console.WriteLine("=====================[XML] 파일의 결과======================\n");

 

            string[] temp = new string[3];
            List<string> finalData = test.getXMLData();
            foreach (string str in finalData)
            {

                // 양끝에 { }를 제거하고 ','로 나눠서 배열에 저장
                temp = str.Substring(1, str.Length-2).Split(','); 

                // 출력
                Console.WriteLine("{0}\n{1}\n{2}\n\n", temp[0], temp[1], temp[2]);
            }

 

            Console.WriteLine("============================================================\n");
        }
    }
}

 

================================================================================================