RSS Processor 제작기(2) ASP.NET/.NET

이제 실제 코드로 들어가 봅니다.

RssProcessor는 크게 5개의 구조체를 가집니다. 채널정보를 저장하는 Channel 구조체, 아이템 정보를 저장하는 Item 구조체, 이미지 정보를 저장하는 Image 구조체, 그리고 더블린 코어 지원을 위한 DublinCore 구조체 입니다. 여기에 또하나의 구조체가 있는데 이 것은 Syndication 구조체 입니다. 더블린 코어와 비슷한 맥락으로 보시면 됩니다. 전체 구조로 보면 루트에 Channel 구조체와 Image 구조체가 위치하고, 그 아래에 Item 구조체의 Array 리스트가 존재합니다. 그리고 Channel 구조체와 Item 구조체에는 DublinCore 구조체와 Syndication 구조체를 가지고 있어 더블린 코어와 신디케이션에 대한 지원을 더합니다. 하지만 RssProcessor에는 Channel 구조체와, Item 구조체, Image 구조체가 평행하게 위치합니다.

RSS 데이터를 객체 데이터로 옮기는 부분은 XML을 해석해서 구조체에 넣는 지루한 부분이기 때문에 전체 부분을 살펴보지 않고 일부분만을 살펴봅니다.

우선 다음은 Channel 구조체 코드의 일부입니다.

public struct ChannelData
{
// channel 태그의 필수 요소
string title; // <title>
string link; // <link>
string description; // <description>

// channel 태그의 옵션 요소
string language; // <language>
string copyright; // <copyright>
string webMaster; // <webMaster>

// 요소가 계속됩니다....

public string Title
{
get { return title; }
set { title = value; }
}

public string Link
{
get { return link; }
set { link = value; }
}

public string Description
{
get { return description; }
set { description = value; }
}

// 속성이 계속됩니다....

사실 구조체의 내용은 매우 평이 합니다. 각각의 스키마의 내용을 형식에 맞게 멤버변수를 지정하고 그에 대한 속성을 지정해 주었습니다. 이런 형식은 다른 구조체도 동일하니 코드를 참고하기 바랍니다.

이렇게 구조체만 지정한다면 별달리 쓸모가 없겠죠. 이번에는 XML의 정보를 구조체에 입력해 주는 부분에 대해서 살펴봅니다. 다음은 XML 처리 부분입니다.

public RssProcessor(string url)
{
doc = new XmlDocument(); // XMLDocument를 생성
doc.Load(url); // Url 연결

XmlNode rootNode = doc.DocumentElement; // 루트 노드를 가져옴
XmlNode channelNode = rootNode.ChildNodes[0]; // 첫번째 노드(Channel 노드)를 가져옴

cd = new ChannelData();
image = new ImageData();
itemArray = new ArrayList();

// Channel 노드를 순회하면서 정보를 수집
foreach(XmlNode node in channelNode.ChildNodes)
{
switch(node.Name.ToLower())
{
case "title":
cd.Title = node.InnerText;
break;

case "link":
cd.Link = node.InnerText;
break;

이 뒤의 부분은 단순히 스키마의 내용을 검색해서 계속 해당하는 내용을 입력해 주는 역할만을 합니다. 이 부분도 계속 반복되는 부분 이기 때문에 이정도로 줄입니다. 사실 데이터를 객체에 바인딩 하는 부분은 복잡한 과정은 거의 없습니다. 단순히 정보를 가져오는 부분이기 때문이죠. 문제는 이렇게 수집된 정보를 가지고 어떻게 응용하느냐하는 문제가 될 것입니다. 그럼 제가 사용하는 간단한 웹 기반 RSS 리더를 살펴봅니다.

덧글

댓글 입력 영역