업무를 하다보면 XML을 이용해 값을 주고 받아야 하는 경우가 많습니다.
그때 Linq To Xml은 코드량을 줄여 줍니다. 간단한 실전 예제로 설명 하겠습니다.
using System.Xml;
//피드 받기 - XmlDocument 형식으로 XML 데이타를 가져옵니다.
XmlDocument doc = GetFeedXmlDocument();
//피드에서 아이템 노드들 추출 - 하단 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를 사용하여 저장하면 끝~
/// <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문서생성 시작");
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>