업무를 하다보면 XML을 이용해 값을 주고 받아야 하는 경우가 많습니다.
그때 Linq To Xml은 코드량을 줄여 줍니다. 간단한 실전 예제로 설명 하겠습니다.

using System.Xml; 

//피드 받기 - XmlDocument  형식으로 XML 데이타를 가져옵니다.
XmlDocument doc = GetFeedXmlDocument();
if (doc == null)
return;

//피드에서 아이템 노드들 추출 - 하단 XML 구존 참조
XmlNodeList itemNodeList = doc.GetElementsByTagName("item");

var qItems = itemNodeList.Cast<XmlNode>().AsQueryable()
                             .Select(node =>
                                 new ItemDTO()
                                 {
                                     Menu = menu,
                                     Title = node["title"].InnerText,
                                     Link = node["link"].InnerText,
                                     Description = node["description"].InnerText,
                                     PubDate = node["pubDate"].InnerText,
                                     KeyNo = node["KeyNo"].InnerText,
                                     Category = node["Category"].InnerText,
                                     Writer = node["Writer"].InnerText,
                                     PDFFile = node["PDFFile"].InnerText,
                                     ETC = node["ETC"].InnerText
                                 });
                    foreach (var item in qItems)
                    {
// var 타입의 값 item을 보내서 ItemDTO 타입의 값으로 저장
// ProcessItem 내에서도 Linq를 사용하기에 InsertOnSubmit를 사용하여 저장하면 끝~
                        ProcessItem(item);
                    }

 /// <summary>
/// 피드를 다운로드 해서, XML문서로 로드한다.
/// </summary>
/// <returns>XML문서</returns>
private static XmlDocument GetFeedXmlDocument()
{
            try
            {
                Console.WriteLine("---------------------------");
                Console.WriteLine("다운로드 시작 : " +  FeedURL);
/// WebClient를 이용하여 XML을 뿌려주는 주소로 가서 XML를 가져와요~
                WebClient wc = new WebClient();
                string feedResult = wc.DownloadString(FeedURL); 
                Console.WriteLine("다운로드 완료");
                Console.WriteLine("---------------------------");

                Console.WriteLine("XML문서생성 시작");
/// XML형식으로 로드 합니다.
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(feedResult);
                Console.WriteLine("XML문서생성 완료");
                Console.WriteLine("---------------------------");
                return doc;
            }
            catch (Exception ex)
            {
                Console.WriteLine("다운로드 및 피드XML문서 로드과정에서 에러발생");
                Console.WriteLine(ex.ToString());
                return null;
            }
}



-- Class 형식
internal class ItemDTO
    {
        public SeriFeedMenuType Menu { get; set; }
        public string Title { get; set; }
        public string Link { get; set; }
        public string Description { get; set; }
        public string PubDate { get; set; }
        public string KeyNo { get; set; }
        public string Category { get; set; }
        public string Writer { get; set; }
        public string RecommandCount { get; set; }
        public string ViewCount { get; set; }
        public string PDFFile { get; set; }
        public string ETC { get; set; }
    }
-- XML 형식
<item>
                  <title>제목</title>
                  <link>
본문링크</link>
                  <description>
본문내용</description>
                  <pubDate>
게시일</pubDate>
                  <guid>
게시물 키 URL</guid>
                   <KeyNo>글번호</KeyNo>
                  <Writer>
작성자</Writer>
                  <Summary>
요약</Summary>
                  <PDFFile>PDF
파일경로</PDFFile>
                  <ETC>
기타게시물정보(첨부파일목록등..)</ETC>
                </item>

+ Recent posts