lecture Home > ASP.NET > Taeyo's ASP.NET

Taeyo's ASP.NET

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2004³â 09¿ù 09ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2004³â 09¿ù 10ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : Taeyo(±è Å¿µ)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : RSS Reader ÄÄÆ÷³ÍÆ® ¸¸µé±â

°­Á Àü Å¿ÀÀÇ Àâ´ã>

Å¿À ÁִϾ ž°í ³ª´Ï, È®½ÇÈ÷ ÀáÀ» ÀÚ´Â °ÍÀÌ ¾î·Á¿öÁ³½À´Ï´Ù. »õº®¿¡ ¸î¹øÀ̳ª ±ú´ÂÁö ¸ð¸£°Ú¾î¿ä. ¤Ð¤Ð...  ±×·¡µµ À̻ڱ⸸ ÇÏ´Ï... ÀÌ°Í Âü ½Å±âÇÕ´Ï´Ù.


Å¿ÀÀÔ´Ï´Ù.

ÀÚ... °­Á°¡ Á¶±Ý ´ÊÀº °¨ÀÌ ¾øÁö ¾ÊÁö¸¸, Å¿À »çÀÌÆ® ¼­¹ö ÀÌÀüÀÛ¾÷µµ ±× »çÀÌ¿¡ ÀÖ¾ú°í, ¶ÇÇÑ Å¿À´å³Ý º£Å¸»çÀÌÆ®¸¦ ¸¸µå´À¶ó ¸¹Àº ½Ã°£À» ÇÒ¾ÖÇϰí Àֱ⿡... ±×·± °ÍÀ̾úÀ¸´Ï ¿©·¯ºÐµéÀÌ ¸¹ÀÌ ÀÌÇØÇØ ÁÖ½Ç °ÍÀ̶ó ¹Ï¾î ÀǽÉÄ¡ ¾Ê¾Æ¿ä ^^ È÷Èý~~

±×·³ ÀÌÁ¦ º»°ÝÀûÀ¸·Î ½ÃÀÛÇØ º¼±î¿ä?

ÀÏ´Ü, Àú¹ø °­Á¸¦ ²Ä²ÄÈ÷ ÀÐÀ¸½Å ºÐÀº ´ÙÀ½°ú °°Àº ÀÏÁ¾ÀÇ ±ÔÄ¢(?)À» ¾Ë°í °è½Ã¸®¶ó »ý°¢ÇÕ´Ï´Ù.

1. ÇϳªÀÇ RSS ÆÄÀÏÀº ÇϳªÀÇ Channel ¿ä¼Ò¿Í ¿©·¯°³ÀÇ Item ¿ä¼Ò·Î ±¸¼ºµÈ´Ù.
2. ChannelÀº title, link, description, lastBuildDateµîÀÇ ÇÏÀ§ ¿ä¼Ò¸¦ °¡Áú ¼ö ÀÖ´Ù.
3. °¢°¢ÀÇ Item Àº Author, Category, Title, Link, Pubdate µîÀÇ ÇÏÀ§ ¿ä¼Ò¸¦ °¡Áú ¼ö ÀÖ´Ù.

´ë·« ÀÌÁ¤µµÀÇ ±ÔÄ¢¸¸À¸·Îµµ ¿ì¸®°¡ °°ÀÌ Á¦ÀÛÇÏ·Á´Â RSSReader¸¦ ¼³°èÇÏ´Â µ¥¿¡´Â Å©°Ô ¹®Á¦°¡ ¾øÀ» °Í °°½À´Ï´Ù. ÄÄÆ÷³ÍÆ®¸¦ ¸¹ÀÌ ¸¸µé¾î º¸½Å ºÐÀº À§ÀÇ Á¤ÀǸ¸À¸·Îµµ ½±°Ô ÇÊ¿äÇÑ °³Ã¼µéÀ» ÃßÃâÇØ³»½Ç ¼ö ÀÖÀ» °Í °°½À´Ï´Ù.

ÀÏ´Ü, item À̶ó´Â °³Ã¼°¡ ÇÊ¿äÇÒ °Í °°±¸¿ä. ¶ÇÇÑ, channel À̶ó´Â °³Ã¼µµ ÇÊ¿äÇÒ °Í °°³×¿ä. ±×¸®°í, item °³Ã¼µéÀº ¿©·¯°³°¡ ÀÖÀ» ¼ö Àֱ⿡, ±×µéÀ» ±×·ìÇÎÇϱâ À§ÇÑ Ä÷º¼Ç °³Ã¼µµ Çϳª ÀÖ¾î¾ß ÇÒ °Í °°½À´Ï´Ù. ±×¸®°í, ¸¶Áö¸·À¸·Î ±×µéÀº °¢°¢ RssReader °³Ã¼¸¦ ÅëÇØ¼­ Á¢±ÙµÉ ¼ö ÀÖ´Â ¼Ó¼ºÀ̱⵵ ÇØ¾ßÇÒ °Í °°½À´Ï´Ù. 

ÇØ¼­, Àú´Â ´ÙÀ½°ú °°Àº ±¸¼ºÀ» ±×·Áº¸¾Ò½À´Ï´Ù.

¹è°æ»öÀÌ ÇÏ¾á °ÍÀº °³Ã¼À̰í, ȸ»öÀÎ °ÍÀº Ä÷º¼ÇÀ» ÀǹÌÇÑ´Ù°í º¸½Ã¸é µÇ°Ú½À´Ï´Ù. ^^; ´ë·«ÀûÀ¸·Î À§¿Í°°Àº ±¸Á¶¸¦ °¡Áø´Ù¸é ±×·±´ë·Î ÀûÀýÇϰÚÁÒ?  Âü°í·Î, ÀúÀÇ °æ¿ì´Â Reader °³Ã¼ÀÇ À̸§Àº RssReader·Î, Channel °³Ã¼ÀÇ À̸§Àº RssChannel·Î, itemÀÇ À̸§Àº RssItemÀ¸·Î, ±×¸®°í ¸¶Áö¸·À¸·Î Ä÷º¼ÇÀº RssItems ¶ó°í ¸í¸íÇϱâ·Î Çß½À´Ï´Ù. Á¦°¡ ºÙÀÎ ¸íĪÀÌ ¸¾¿¡ µéÁö ¾Ê´Â´Ù¸é, ¿©·¯ºÐÀº ¿©·¯ºÐÀÌ ¿øÇϽô À̸§À¸·Î ¸í¸íÇϼŵµ ÁÁÀ» µí ÇÕ´Ï´Ù. ^^

ÀÚ. ±×·³ Á¦°¡ °¢°¢ÀÇ °³Ã¼µéÀÇ Äڵ带 ¾î¶»°Ô ÀÛ¼ºÇß´ÂÁö º¸¿©µå¸®°Ú½À´Ï´Ù. ÀÌ ¹æ¹ýÀÌ °¡Àå ÁÁÀº ¹æ¹ýÀº ¹°·Ð ¾Æ´Ò °ÍÀÔ´Ï´Ù. Á¦°¡ ÀÛ¼ºÇÑ ÄÚµå´Â »ç½Ç ¼º´ÉÀ» ¸é¹ÐÇÏ°Ô °í·ÁÇÏ¿© ÀÛ¼ºµÈ ÄÚµå´Â ¾Æ´Ï±¸¿ä. ±×³É ÀϹÝÀûÀÎ ¼öÁØÀÇ ÄÚµåÀÏ »ÓÀ̴ϱî¿ä. ÇÏÁö¸¸, »ç¿ëÇØº¸´Ï ÀÌ Á¤µµÀÇ ÄÚµå·Îµµ ±¦Âú°Ô µ¿ÀÛÇϱ⿡ Àú´Â ÀÌ Äڵ带 »ç¿ëÇϰí ÀÖ½À´Ï´Ù(¾ÆÁÖ ¾à°£ÀÇ ¼öÁ¤À» ÇØ¼­ ¸»ÀÌÁÒ ^^)

ÀÚ. ¿ì¼± º¸¿©µå¸± °ÍÀº RssItem °³Ã¼¿Í RssChannel °³Ã¼ÀÇ ÄÚµåÀÔ´Ï´Ù. Âü°í·Î, ÀúÀÇ °æ¿ì´Â RssItemÀº ±¸Á¶Ã¼·Î½á ÀÛ¼ºÇØ º¸¾Ò±¸¿ä. RssChannleÀº Ŭ·¡½º·Î ÀÛ¼ºÇØ º¸¾Ò½À´Ï´Ù. À̵éÀº ´Ü¼øÈ÷ µ¥ÀÌÅ͸¦ º¸°üÇϱ⸸ ÇÏ¸é µÇ´Â ³à¼®µéÀ̱⿡, ¾Æ¹«·± ¸Þ¼­µå ¾øÀÌ ´Ü¼øÈ÷ Çʵå¿Í ¼Ó¼ºÀ¸·Î¸¸ ±¸¼ºµÇ¾îÁ® ÀÖ½À´Ï´Ù.

public class RssChannel
{
    private string title;
    private Uri link;
    private string description;
    private string language;
    private string copyright;
    private DateTime lastBuildDate;

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

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

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

    public string Language
    {
    get {    return language;    }
    set {    language = value;    }
    }

    public string Copyright
    {
    get {    return copyright;    }
    set {    copyright = value;    }
    }

    public DateTime LastBuildDate
    {
    get {    return lastBuildDate;    }
    set {    lastBuildDate = value;    }
    }
}

public struct RssItem
{
    public string Author;
    public string Category;
    public string Title;
    public Uri Link;
    public DateTime Pubdate;
    public string Description;
}

±×·¸½À´Ï´Ù. RSS 2.0 ½ºÆå¿¡ ÀÖ´Â ¸ðµç ¿ä¼ÒµéÀ» ´Ù Çʵå·Î ÀÛ¼ºÇÏÁö´Â ¾Ê¾Ò½À´Ï´Ù. ´õ ¿Ïº®ÇÑ ¸®´õ±â¸¦ Á¦ÀÛÇÏ·Á¸é ±×µéÀÇ ¸ñ·ÏÀÌ ¸ðµÎ µé¾îÀÖ¾î¾ß ÇϰÚÁö¸¸, ÀϹÝÀûÀÎ ¼öÁØÀÇ °ÍÀº ±×·¸°Ô±îÁö ¿Ïº®ÇÒ Çʿ䰡 ¾ø¾îº¸ÀÌ´õ¶ó±¸¿ä. »ç½Ç, ÀÎÅͳݿ¡ ¶°µ¹°í ÀÖ´Â ´ëºÎºÐÀÇ RSS°¡ ±× ½ºÆå¿¡¼­ ¿ä±¸ÇÏ´Â ¸ðµç ¿ä¼ÒµéÀ» ±â·ÏÇϰí ÀÖÁöµµ ¾ÊÀº ÆíÀ̴ϱî¿ä.

ÇØ¼­, ÀúÀÇ °æ¿ì´Â º¸ÆíÀûÀ¸·Î ¸¹ÀÌ »ç¿ëÇÏ´Â ¿ä¼Òµé¸¸À» °¡Áø ÄÞÆÑÆ®ÇÑ ¹öÀüÀ» ¸¸µé°í ÀÖ´Â °ÍÀ̶ø´Ï´Ù.

À§ÀÇ Äڵ忡¼­ Å©°Ô ¾î·Á¿î Á¡À» ¾ø¾úÀ» °Í °°½À´Ï´Ù. C#À̳ª VB.NETÀ» ¾î´ÀÁ¤µµ °øºÎÇß´Ù¸é Ã¥ÀÇ Ãʹݺο¡ ³ª¿À´Â À̾߱âµéÀ̴ϱî¿ä.  Ŭ·¡½º Á¤ÀÇÇϱâ, ±¸Á¶Ã¼ Á¤ÀÇÇϱâ, ¼Ó¼º Á¤ÀÇÇϱ⠵îµî ¸»ÀÔ´Ï´Ù. ^^;

±×·¸´Ù¸é, À̾ Äڵ带 º¸½Ã°Ú½À´Ï´Ù. À̹ø ÄÚµå´Â RssItemÀ» ±×·ìÇÎÇÏ´Â ¿ªÇÒÀ» ´ã´çÇÏ´Â RssImtes Ä÷º¼Ç Ŭ·¡½ºÀÔ´Ï´Ù. ^^

public class RssItems : CollectionBase
{
    public RssItem this[int index]
    {
        get
        {
            return (RssItem)List[index];
        }
        set
        {
            List[index] = value;
        }
    }

    public int Add(RssItem value)
    {
        return List.Add(value);
    }

    public int IndexOf(RssItem value)
    {
        return List.IndexOf(value);
    }

    public void Insert(int index, RssItem value)
    {
        List.Insert(index, value);
    }

    public void Remove(RssItem value)
    {
        List.Remove(value);
    }

    public bool Contains(RssItem value)
    {
        return List.Contains(value);
    }
}

RssItems Ä÷º¼ÇÀº CollectionBase¶ó´Â Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ°í Àִµ¥¿ä. ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ¸é °­·ÂÇÑ Çü½ÄÀÇ »ç¿ëÀÚ ÁöÁ¤ Ä÷º¼ÇÀ» ½±°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ÇØ¼­, Ä÷º¼ÇÀ» Á¦ÀÛÇÏ°í ½ÍÀº °æ¿ì¿¡ ¸¹ÀÌµé »ó¼ÓÀ» ¹Þ´Â Ŭ·¡½ºÀÔ´Ï´Ù. ÀÌ´Â ÀúÀÇ °æ¿ìµµ ¿¹¿Ü´Â ¾Æ´Ï¾î¼­¸®.. Àúµµ CollectionBase ·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Æº¸¾Ò½À´Ï´Ù.

CollectionBase Ŭ·¡½º´Â ³»ºÎÀûÀ¸·Î IList ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϰí ÀÖÀ¸¸ç, CollectionBase °³Ã¼ ÀνºÅϽºÀÇ ¿ä¼Ò ¸ñ·ÏÀ» Æ÷ÇÔÇÏ´Â List(IList ÀÎÅÍÆäÀ̽º)¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù. ÇØ¼­, CollectionBase Ŭ·¡½º¸¦ »ó¼Ó¹Þ¾Æ¼­ ÀÚü Ä÷º¼ÇÀ» ±¸¼ºÇÏ°í ½Í´Ù¸é, IListÀÇ ¸â¹öµéÀ» ±¸ÇöÇØÁÖ´Â °ÍÀÌ ÁÁ°ÚÁÒ? ±×·¯¸é, °³Ã¼°¡ º¸±â¿¡ ´õ¿í ²Ã·º¼ð ½º·¯¿ï Å״ϱî¿ä

±×¸®°í, Ä÷º¼ÇÀ̶ó¸é Çʼö·Î ÇÊ¿äÇÑ ±â´ÉÀÎ!! Àε¦¼­µµ ´Þ¾ÆÁÖ´Â °Ô ÁÁÀ» °ÍÀ̱¸¿ä ^^

ÀÌ·¯ÇÑ ÀÌÀ¯·Î À§¿Í °°ÀÌ Add, Insert, Remove, Contains, IndexOf¿Í °°Àº ³¸¼³Áö ¾ÊÀº À̸§ÀÇ ¸Þ¼­µåµéÀ» Á¤ÀÇÇÑ °ÍÀ̶ø´Ï´Ù. ±×¸®°í, ±× ³»ºÎ ±¸ÇöÀ» À§Çؼ­´Â CollectionBase Ŭ·¡½ºÀÇ ¼Ó¼ºÀÎ List¸¦ Æí¸®ÇÏ°Ô ÀÌ¿ëÇϰí ÀÖ±¸¿ä ^^; (ÀÌ ºÎºÐÀÇ ³»¿ëÀÌ Á¶±Ý ¾î·Æ°Ô ¹Þ¾Æµé¿©Áö½Å´Ù¸é, .NET ¾ð¾î¿¡ ´ëÇÑ ÇнÀÀÌ Á¶±Ý ÇÊ¿äÇϽŠ°Í °°À¸´Ï, ÃßÈÄ¿¡ ²À º¸ÃæÇнÀ ÇØ ÁÖ¼¼¿ä ^^)

ÀÚ.... ÀÌÁ¦ ±âº»ÀûÀÎ ÇÏÀ§ °³Ã¼µéÀÇ ¼³°è´Â ¾î´ÀÁ¤µµ ¿Ï¼ºµÈ °Í °°½À´Ï´Ù. ±×·¸´Ù¸é, ÀÌ °³Ã¼µéÀ» Àß Á¶¸³Çؼ­ ÀÌÁ¦ º»°ÝÀûÀÎ RssReader Ŭ·¡½ºÀÇ ¼³°è·Î µé¾î°¡ º¸°Ú½À´Ï´Ù. ^^;

ÀúÀÇ °æ¿ì´Â ÀÏ´Ü RSS(XML ÆÄÀÏ)¿¡¼­ µ¥ÀÌÅ͸¦ Àоî¿Í¼­ ±×°ÍÀ» XML °ü·Ã .NET °³Ã¼ÀÎ XmlDocument¿¡ ·ÎµåÇÑ ´ÙÀ½, ·ÎµåµÈ XML µ¥ÀÌÅ͸¦ RssItem°ú RssChannel¿¡ ä¿ì´Â ½ÄÀ¸·Î ¼³°èÇØ º¸¾Ò½À´Ï´Ù.

RssReaderÀÇ ´ëÇ¥ÀûÀÎ ¿ÜºÎ·Î °ø°³ÇÒ API·Î´Â Load() ¸Þ¼­µå¿Í LoadFromHttp()¸¦ °èȹÇϰí Àִµ¥¿ä. À̵éÀº °¢°¢ ·ÎÄÿ¡ ÀÖ´Â RSS ÆÄÀÏ È¤Àº ÀÎÅÍ³Ý Àú³Ê¸Ó¿¡ Á¸ÀçÇÏ´Â RSS ÆÄÀÏÀ» °¡Á®¿Í¼­ À̸¦ ·ÎµåÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇÕ´Ï´Ù. Áï, ÀÎÀÚ·Î ÁöÁ¤µÈ RSS ÆÄÀÏÀ» Àоî¿Í¼­ ±×°ÍÀ» RssReader °³Ã¼¿¡ ·ÎµåÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇÏ°Ô ÇÒ ¿¹Á¤ÀÔ´Ï´Ù. ±×·¯´Ùº¸´Ï, ÀÌ µÎ °³ÀÇ ¸Þ¼­µå´Â °øÅëÀûÀÎ ÀÛ¾÷À» ÁøÇàÇÏ°Ô µÇ´Âµ¥¿ä. ±×°ÍÀº ¹Ù·Î, XML ÆÄÀϷκÎÅÍ µ¥ÀÌÅ͸¦ °¡Á®¿Í¼­ RssReader °³Ã¼ÀÇ ¼Ó¼º °³Ã¼ÀÎ Channel°ú Items¿¡ ä¿ö³Ö´Â ºÎºÐÀÔ´Ï´Ù. ·ÎÄÿ¡¼­ RSS XML ÆÄÀÏÀ» Àоî¿À´ø, À¥À» ÅëÇØ¼­ Àоî¿À´ø ÀÏ´Ü XML ÆÄÀÏÀÌ XmlDocument °³Ã¼¿¡ ·ÎµåµÈ ÈÄ¿¡´Â ±×·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÃßÃâÇÏ¿© RssReader¸¦ ä¿ì´Â ÀÛ¾÷Àº ÀǽÉÀÇ ¿©Áö¾øÀÌ µ¿ÀÏÇÒÅ״ϱî¿ä. ÇØ¼­, ÀÌ ºÎºÐÀº °øÅëµÇ´Â ºÎºÐÀ̱⿡ ³»ºÎÀûÀ¸·Î º°µµ ÇÔ¼ö(PopulateRssData)·Î »©¼­ Á¦ÀÛÇØ º¸¾Ò½À´Ï´Ù.

±×·³, Á¶±Ý º¹ÀâÇØ º¸ÀÏ ¼öµµ ÀÖ°ÚÁö¸¸, Çѹø Á¦°¡ ÀÛ¼ºÇÑ Äڵ带 º¸½Ãµµ·Ï ÇϰڽÀ´Ï´Ù.

public class RssReader
{
    private XmlDocument Document;
    private XmlNode DocumentRoot;
    private RssItems rssItems;
    private RssChannel rssChannel;

    // »ý¼ºÀÚ. XmlDocument °³Ã¼ »ý¼º ¹× RssItems Ä÷º¼Ç »ý¼º
    public RssReader()
    {
        Document = new XmlDocument();
        rssItems = new RssItems();
    }

    #region [°ø°³ ¼Ó¼ºµé]
    // RssItems Ä÷º¼ÇÀ» ¼Ó¼ºÀ¸·Î½á ³ëÃâÇÑ´Ù
    public RssItems Items
    {
        get {    return rssItems;    }
        set {    rssItems = value;    }
    }

    // RssChannel °³Ã¼¸¦ ¼Ó¼ºÀ¸·Î½á ³ëÃâÇÑ´Ù
    public RssChannel Channel
    {
        get {    return rssChannel;    }
        set {    rssChannel = value;    }
    }
    #endregion

    #region [°ø°³ ¸Þ¼­µåµé]
    // ¿ÜºÎ °ø°³ ¸Þ¼­µå. ³»ºÎÀûÀ¸·Î ·ÎÄà XML ÆÄÀÏÀ» ·ÎµåÇÏ´Â LoadFromFile ¸Þ¼­µå¸¦ È£ÃâÇϰí,
    // ·ÎµåµÈ XML µ¥ÀÌÆ®¸¦ °¡Áö°í, RssReader °³Ã¼¸¦ ä¿ì´Â PopulateRssData ¸Þ¼­µå¸¦ È£ÃâÇÑ´Ù
    public void Load(string filename)
    {
        LoadFromFile(filename);
        PopulateRssData();
    }

    // ¿ÜºÎ °ø°³ ¸Þ¼­µå. ³»ºÎÀûÀ¸·Î ¿ø°Ý XML ÆÄÀÏÀ» ·ÎµåÇÏ´Â LoadFromUrl ¸Þ¼­µå¸¦ È£ÃâÇϰí,
    // ·ÎµåµÈ XML µ¥ÀÌÆ®¸¦ °¡Áö°í, RssReader °³Ã¼¸¦ ä¿ì´Â PopulateRssData ¸Þ¼­µå¸¦ È£ÃâÇÑ´Ù
    public void LoadFromHttp(string Url)
    {
        LoadFromUrl(Url);
        PopulateRssData();
    }

    // ·ÎÄà XML ÆÄÀÏÀ» XmlDocument¿¡ ·ÎµåÇÑ´Ù
    private void LoadFromFile(string filename)
    {
        Document.Load(filename);
    }

    // ¿ø°Ý XML ÆÄÀÏÀ» HttpWebRequest, HttpWebResponse¸¦ ÀÌ¿ëÇÏ¿© XmlDocument¿¡ ·ÎµåÇÑ´Ù
    private void LoadFromUrl(string Url)
    {
        HttpWebRequest request;
        string responseText = "";

        request = (HttpWebRequest)WebRequest.Create(Url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream stream = response.GetResponseStream();

        StreamReader reader = new StreamReader(stream, System.Text.Encoding.GetEncoding(949));
        responseText = reader.ReadToEnd();

        response.Close();
        reader.Close();

        Document.LoadXml(responseText);
    }

    #endregion

    // ÁöÁ¤µÈ XmlNodeList¿¡¼­ ƯÁ¤ À̸§ÀÇ ³ëµå¸¦ ã¾Æ¼­ ¹ÝȯÇÑ´Ù
    private XmlNode getNode(XmlNodeList list, string nodeName)
    {
        for (int i = 0; i < = list.Count - 1; i++)
        {
            if (list.Item(i).Name == nodeName)
            {
                return list.Item(i);
            }
        }

        return null;
    }

    // XmlDocument¿¡¼­ µ¥ÀÌÅ͸¦ ÃßÃâÇÏ¿© RssReader °³Ã¼¸¦ ä¿î´Ù
    private void PopulateRssData()
    {
        XmlNode node;
        XmlNode itemNode;

        //Çì´õ ÃʱâÈ­
        rssChannel = new RssChannel();
        rssChannel.Copyright = "";
        rssChannel.Description = "";
        rssChannel.Language = "";
        rssChannel.Title = "";

        DocumentRoot = getNode(Document.ChildNodes, "rss");
        DocumentRoot = getNode(DocumentRoot.ChildNodes, "channel");

        // Çì´õ°ªµéÀ» ¼³Á¤ÇÏ´Â ºÎºÐ
        node = getNode(DocumentRoot.ChildNodes, "title");
        if (node != null) rssChannel.Title = node.InnerText;
        node = getNode(DocumentRoot.ChildNodes, "link");
        if (node != null) rssChannel.Link = new Uri(node.InnerText);
        node = getNode(DocumentRoot.ChildNodes, "description");
        if (node != null) rssChannel.Description = node.InnerText;
        node = getNode(DocumentRoot.ChildNodes, "language");
        if (node != null) rssChannel.Language = node.InnerText;
        node = getNode(DocumentRoot.ChildNodes, "copyright");
        if (node != null) rssChannel.Copyright = node.InnerText;
        node = getNode(DocumentRoot.ChildNodes, "lastBuildDate");
        if (node != null) rssChannel.LastBuildDate= DateTime.Parse(node.InnerText);

        rssItems.Clear();
        for (int i = 0; i < = DocumentRoot.ChildNodes.Count - 1; i++)
        {
            // item ³ëµå¸¦ ·çÇÁ µ¹¸é¼­ µ¥ÀÌÅ͸¦ °¡Á®¿Â´Ù
            if (DocumentRoot.ChildNodes[i].Name == "item")
            {
                itemNode = DocumentRoot.ChildNodes[i];
                RssItem item = new RssItem();

                node = getNode(itemNode.ChildNodes, "author");
                if (node != null) item.Author = node.InnerText;

                node = getNode(itemNode.ChildNodes, "category");
                if (node != null) item.Category = node.InnerText;

                node = getNode(itemNode.ChildNodes, "title");
                if (node != null) item.Title = node.InnerText;

                node = getNode(itemNode.ChildNodes, "link");
                if (node != null) item.Link = new Uri(node.InnerText);

                node = getNode(itemNode.ChildNodes, "pubDate");
                if (node != null) item.Pubdate = DateTime.Parse(node.InnerText);

                node = getNode(itemNode.ChildNodes, "description");
                if (node != null) item.Description = node.InnerText;

                rssItems.Add(item);
            }
        }
    }
}

Á¶±Ý¸¸ ½ÅÁßÇÏ°Ô »ìÆìº¸½Ã¸é ÃæºÐÈ÷ ÀÌÇØ°¡ µÉ¸¸ÇÑ ÄÚµåÀÎ °Í °°³×¿ä ^^;; ±×ÃÝ? (¾ó··¶×¶¥ °°ÀÌ ³Ñ¾î°©´Ï´ç~ È÷È÷)

ÀÚ. ¸ðµÎ ÀÛ¼ºÇÏ¿´À¸¸é ÀÌÁ¦ Çѹø ÀÌ Å¬·¡½º¸¦ ÄÄÆÄÀÏ ÇØº¼±î¿ä? ÀúÀÇ °æ¿î, º°µµÀÇ Å¬·¡½º ¶óÀ̺귯¸® ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¾ú±¸¿ä. RssReader.cs ¶ó´Â Ŭ·¡½º ÆÄÀÏÀ» ¸¸µé¾î¼­ À§¿Í °°ÀÌ Äڵ带 ÀÛ¼ºÇØ º¸¾Ò´ä´Ï´Ù. ^^

¾Ñ. Ȥ½Ã ÄÄÆÄÀϽà ¿¡·¯°¡ ³ª½Å´Ù´Â ºÐµéÀ» À§Çؼ­ ÀÓÆ÷Æ®ÇØ¾ß ÇÒ ³×ÀÓ½ºÆäÀ̽ºµµ Ä£ÀýÇÏ°Ô ¾Ë·Áµå¸®°Ú½À´Ï´Ù. ¹Ù·Î ´ÙÀ½°ú °°½À´Ï´Ù.

using System;
using System.Collections;
using System.Data;
using System.Web;
using System.IO;
using System.Xml;
using System.Net;

±×·¡µµ, ¿¡·¯°¡ ³ª½Å ´Ù´Â ºÐµéÀÌ °è½Ã´Â °Í °°³×¿ä. ±×·¸´Ù¸é, ±×ºÐµéÀ» À§Çؼ­ ¾Æ¿¹ ¼Ò½º ÆÄÀÏÀ» µå¸®°Ú½À´Ï´Ù. ´Ù¿î·Îµå ¹Þ¾ÆÁÖ¼¼¿ä ^^;;

RssReader°¡ Æ÷ÇÔµÈ Å¬·¡½º ¶óÀ̺귯¸® ´Ù¿î·Îµå

Âü°í·Î, ÀÌ ÇÁ·ÎÁ§Æ®´Â VS.NET 2003À¸·Î Á¦À۵Ǿú½À´Ï´Ù.
VS.NET ÇÏÀ§¹öÀüÀ» ¾²½Ã´Â ºÐÀº Ŭ·¡½º ÆÄÀϸ¸ °¡Á®´Ù°¡ »ç¿ëÇϼ¼¿ä

ÀÌÁ¦ ÄÄÆÄÀϵµ µÇ¾ú°í, RssReader ÄÄÆ÷³ÍÆ®µµ ¿Ï¼ºÀÌ µÇ¾úÁÒ? ±×·¸´Ù¸é, ÀÌ ³à¼®À» Á÷Á¢ Çѹø »ç¿ëÇØ º¸µµ·Ï ÇØ¿ä ^^ ¿©·¯ºÐÀÇ À¥ ÇÁ·ÎÁ§Æ®¿¡´Ù°¡ ºó À¥ Æû ÆäÀÌÁö¸¦ Çϳª Ãß°¡ÇØ ÁÖ¼¼¿ä. ¾î¶² À̸§ÀÇ aspx ¿©µµ ¹«¹æÇÕ´Ï´Ù. ^^; ±×¸®°í, ±× À¥ÆûÀÇ Page_Load À̺¥Æ®¿¡ ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇØ º¸¼¼¿ä ^^

    private void Page_Load(object sender, System.EventArgs e)
    {
        // ¿©±â¿¡ »ç¿ëÀÚ Äڵ带 ¹èÄ¡ÇÏ¿© ÆäÀÌÁö¸¦ ÃʱâÈ­ÇÕ´Ï´Ù.
        RssReader reader = new RssReader();
        reader.LoadFromHttp("http://www.taeyo.net/lecture/rss.xml");

        RssChannel head = reader.Channel;

        Response.Write("Title : " + reader.Channel.Title + "<BR>");
        Response.Write("Link : " + reader.Channel.Link.ToString() + "<BR>");
        Response.Write("Language : " + reader.Channel.Language + "<BR>");
        Response.Write("lastBuildDate : " + reader.Channel.LastBuildDate + "<BR>");
        Response.Write("Description : " + reader.Channel.Description + "<BR><BR>");

        for(int i = 0; i < reader.Items.Count; i++)
        {
            RssItem item = reader.Items[i];
            Response.Write(item.Author + " : " + item.Title + " (" + item.Pubdate.ToString() +")<BR>");
        }
    }

±×¸®°í, ÀÌ À¥ ÆäÀÌÁö¸¦ ½ÇÇàÇØ º¸¾Æ¿ä. ¹°·Ð, ½ÇÇà Àü¿¡ ¾Õ¿¡¼­ ¸¸µç TaeyoWebLib.dllÀ» ÇÁ·ÎÁ§Æ®¿¡¼­ ÂüÁ¶Çϰí ÀÖ¾î¾ß Çϰí, using TaeyoWebLib¸¦ ÅëÇØ¼­ ³×ÀÓ½ºÆäÀ̽º¸¦ ÀÓÆ÷Æ®ÇØ¾ßÇÏ´Â °ÍÀº ÀØÁö ¾ÊÀ¸¼Ì¾î¾ß Á¦´ë·Î ½ÇÇàµÉ °ÍÀÔ´Ï´Ù. ^^

¾î¶²°¡¿ä? ¸ÚÁö°Ô ´Ù¸¥ À¥ »çÀÌÆ®ÀÇ RSS¸¦ °¡Á®¿Í¼­ Ãâ·ÂÇØÁÖ°í ÀÖ³ª¿ä? Å¿À »çÀÌÆ®°¡ ¾Æ´Ñ ´Ù¸¥ »çÀÌÆ®ÀÇ RSSµµ Çѹø Àоî¿Í º¸¼¼¿ä. ¾î´ÀÁ¤µµ ¸¸Á·ÇÒ¸¸ÇÑ ¼öÁØÀ¸·Î µ¿ÀÛÇÏÁö ¾Ê³ª¿ä? È÷È÷... Àç¹ÌÀÖÁÒ?

»ç½Ç, ½ÇÁ¦ Á¦°¡ »ç¿ëÇÏ´Â RssReader Ŭ·¡½ºÀÇ °æ¿ì¿¡´Â Á¶±Ý ´õ ¾ç³äÀ» ÃÄ º¸¾Ò´Âµ¥¿ä. ±×·¯´Ï±ñ, °í¹éÇÏÀÚ¸é ÀúÀÇ °æ¿ì´Â RssItems Ä÷º¼ÇÀÇ µ¥ÀÌÅ͸¦ DataSetÀ¸·Î ¹ÝȯÇÏ´Â ¸Þ¼­µå¸¦ Ãß°¡·Î ³Ö¾îµÎ¾ú½À´Ï´Ù. ÇØ¼­, ½±°Ô DataGrid¿Í °°Àº ¹Ù¿îµå ÄÁÆ®·Ñ¿¡ ½±°Ô ¹ÙÀε尡 °¡´ÉÇϰԲû ¸»ÀÌÁö¿ä ^^;; ÀÌ ºÎºÐÀº ¿©·¯ºÐÀÌ Çѹø ½º½º·Î Ãß°¡ÇØ º¸½Ã°Ú¾î¿ä? ±×¸®°í, ¸¸ÀÏ, µµÀúÈ÷ ¾ÈµÇ°Ú´Ù ÇϽô ºÐµéÀ» À§Çؼ­´Â ÈùÆ®¸¦ µå¸±²²¿ä. ±×°ÍÀº... ÇöÀç ÆäÀÌÁö¿¡¼­ [¼Ò½ºº¸±â]¸¦ ÇÏ½Ã¸é µË´Ï´Ù. ÈùÆ®´Â ¿©±â±îÁö~~ ^^

±×¸®°í, ÀÌ·¯ÇÑ ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÒ °æ¿ì Á¶½ÉÇØ¾ß ÇÒ »çÇ×ÀÌ À־ ¾Ë·Áµå¸®´Âµ¥¿ä. ±×°ÍÀº RSS¸¦ ÅëÇØ¼­ µ¥ÀÌÅ͸¦ Àоî¿Í¼­ ÀÚ½ÅÀÇ À¥ »çÀÌÆ®¿¡¼­ ¹«´ÜÀ¸·Î ¸µÅ©¸¦ °É¾î¼­´Â ¾ÈµÈ´Ù´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î¼­, ¿©·¯ºÐÀÌ Å¿À»çÀÌÆ®¿¡¼­ Á¦°øÇÏ´Â RSS¸¦ Àо, ¿©·¯ºÐÀÇ »çÀÌÆ®¿¡¼­ ±× ¸®½ºÆ®¸¦ ³ª¿­ÇÏ°í ¸µÅ©¸¦ °É°í ½Í´Ù°í ÇØµµ, ±×·¸°Ô ÇÏ·Á¸é ¿ì¼±ÀûÀ¸·Î ÇØ´ç »çÀÌÆ®ÀÇ °ü¸®ÀÚ¿¡°Ô µ¿ÀǸ¦ ¹ÞÀ¸¼Å¾ß ÇÕ´Ï´Ù. ¸¸ÀÏ, ±×·¸°Ô ÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â Â÷ÈÄ ¾î¶°ÇÑ ºÒÀÌÀÍÀÌ ¿ÃÁö ¸ð¸£´Ï±î¿ä.

»õ·Î¿î Å¿À´å³Ý »çÀÌÆ®ÀÇ ¸ÞÀο¡´Â Microsoft°¡ Á¦°øÇÏ´Â MSDNÀÇ ¸ñ·ÏÀ» ¸µÅ©¸ñ·ÏÀ¸·Î Ãâ·ÂÇÏ´Â °ÍÀ» º¸½Ç ¼ö ÀÖÀ»ÅÙµ¥¿ä. ±× ºÎºÐÀÌ ¹Ù·Î Áö±Ý °°ÀÌ ¸¸µé¾î º» RssReader¸¦ »ç¿ëÇØ¼­ ±¸ÇöÇÑ °ÍÀÔ´Ï´Ù¸¸, ÀúÀÇ °æ¿ì´Â ±×°ÍÀ» ¸µÅ©Çϱâ À§Çؼ­ Microsoft¿¡ »ç¿ëµ¿ÀÇ ¿äûÀ» Çß¾ú±¸¿ä. º¸¸§ Á¤µµÀÇ ½Ã°£ÀÌ °É·Á¼­ °á±¹Àº ½Â³«À» ¾ò¾î³Â±â¿¡ ¸µÅ©¸¦ Çϰí ÀÖ´Â °ÍÀ̶ø´Ï´Ù. (º¸¸§Àº ³»°Ô ³Ê¹« ±æ¾ú¾î.. ¤Ð¤Ð ÇÏÁö¸¸, ´ÙÇàÀ̾ß.. )

ÀÌ ºÎºÐÀº ÁÖÀÇÇØ ÁÖ¼¼¿ä ^^;; ´ëºÎºÐÀÇ °æ¿ì, Ưº°ÇÑ ÀÌÀ¯°¡ ¾ø´ÂÇÑÀº ¾Æ¸¶µµ ´Ùµé µ¿ÀÇÇØ ÁÙÅ×´Ï, ³Ê¹« °ÆÁ¤ÇÏÁö ¸¶½Ã°í, »ç¿ëµ¿ÀÇ ¿äû ¸ÞÀÏÀ» º¸³»º¸¼¼¿ä ^^

ÀÚ~ ±×·³, Àú´Â ´ÙÀ½ ½Ã°£¿¡ RssWriter ¸¸µé±â °­Á¸¦ °¡Áö°í ´Ù½Ã ã¾Æ¿À°Ú½À´Ï´Ù.^^.. ¾Æ¸¶ ±×¶§Áò¿¡´Â »õ·Î¿î Å¿À´å³Ý »çÀÌÆ®¿¡¼­ °­Á¸¦ º¸½Ç ¼öµµ ÀÖÀ» °Í °°³×¿ä.

¿À´Ãµµ ÁÁÀº ÇÏ·ç µÇ¼¼¿ä. ÀоîÁּż­ °¨»çÇÕ´Ï´Ù.

°­Á ¸ñ·ÏÀ¸·Î..