C#-та XML документті оқу (RSS)

Web
Қайырлы күн!

RSS лента жайында бәріміз білеміз. Қазіргі таңда көптеген порталдар өз жаңалықтарын RSS арқылы таратады. Өзге сайттар ол мәліметтерді өзіне орналастыра алады.

RSS лента — ол арнайы сілтеме. Сілтемеге өткенде қажетті ақпарат XML документ ретінде ашылады. Мысалға, біздің сайттың RSS лентасына өтіп қараңыз. http://itblog.kz/rss/

XML документ бір көргенде түсініксіз шимай болып көрінгенмен, html тегтерден хабарыңыз болса, оның құрылымын жобалауға болады. Біздің мысалымызда, блогымыздағы жазбалар тізімі берілген. Әрбір ішінде ақпарат төмендегідей тегтер ішінде жазылған.
  • — тақырыбы
    — сілтемесі
    — сипаттамасы

    XML документімізге сәйкес модель класс құрып аламыз.
    public class RssData
        {
            public string Title { get; set; }
            public string Link { get; set; }
            public string Description { get; set; }
    
        }

    Келесі метод сілтеме бойынша мәліметтерді RssData[] массиві түрінде қайтарады.
    public RssData[] GetRssData()
            {
                XDocument feedXml = XDocument.Load(_xmlURL);
                var feeds = from feed in feedXml.Descendants("item")
                            select new RssData
                            {
                                Title = feed.Element("title").Value,
                                Link = feed.Element("link").Value,
                                Description = feed.Element("description").Value
                            };
                return feeds.ToArray();
            }

    Ары қарай мәліметтерді қалауыңызша өзгертіп, түрлі интерфейсте шығара бересіз.

    Назарларыңызға рахмет. Сұрақтар болса, пікірлерде талқылайық!

7 пікір

avatar
Көрсетілген модель және сілтеме бойынша XML документті оқитын универсал метод жазу идеясы келіп жатыр:)
avatar
public static object[] GetData(object type, string xmlUrl);
avatar
Уже бар гой. C#-та XMLSerializer деген атрибут бар. Сонымен кез келген объектти XML-ге айналдырып, обратно C# объектке айналдыра саласыз, еш киындыксыз.
avatar
Рахмет, Даке. Сериализация, десериализация жасап көрдім. Керемет екен. Енді бір сұрақ туып тұр: Десериализация кезінде объектінің классын алдын ала дайындап аламын ғой(xml-ге сәйкестендіріп). Басқаша жолмен класс өзі құрылғандай қылу үшін unreal шығар?:)
avatar
Неге unreal :) Ол да уже жасалынып койган уже давно. Класты динамически создавать ету ушин рефлексия деген такырып бар. Ал XML-ден класс жасау ушин алдымен XML-ди XSD-ге сайкес екенин тексерип аласыз. Ал кез кезген XSD схемадан класс жасайтын готовый инструмент Visual Studio-да дайын. Необязательно через VS, утилитаны болек колдануга да болады, командная строкамен.
avatar
Керемет, ертең ИнщаАллах қарармын. Өте қажет еді:)
avatar
Мынадай методтар жазып қойдым. XML-мен жұмысты біршама оңайлатады. BaseXML — бос abstract класс.
public static bool Serialize<T>(T value, String filename) where T:BaseXml
        {
            if (value == null)
            {
                return false;
            }
            try
            {
                XmlSerializer _xmlserializer = new XmlSerializer(typeof(T));
                Stream stream = new FileStream(filename, FileMode.Create);
                _xmlserializer.Serialize(stream, value);
                stream.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        
        public static T Deserialize<T>(String filename) where T:BaseXml 
        {
            if (string.IsNullOrEmpty(filename))
            {
                return default(T);
            }
            try
            {
                XmlSerializer _xmlSerializer = new XmlSerializer(typeof(T));
                Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read);
                var result = (T)_xmlSerializer.Deserialize(stream);
                stream.Close();
                return result;
            }
            catch (Exception ex)
            {
                return default(T);
            }
        }
Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.