LINQ to XML을 사용하여 WordPress RSS 피드를 읽을 수 있습니다.
먼저 피드를 가져옵니다. Uri 인스턴스를 생성합니다.
var rssFeed = new Uri("http://cgeers.com/feed/");
그런 다음 GET 요청을 수행하십시오.
var request = (HttpWebRequest) WebRequest.Create(rssFeed);
request.Method = "GET";
var response = (HttpWebResponse) request.GetResponse();
응답 스트림을 가져 와서 읽어 피드 내용을 다운로드하십시오. 아직 다운로드 한 내용을 분석하고 필요한 정보를 추출하기 위해 XML을 위의 using 문을 사용 LINQ 내
using (var reader = new StreamReader(response.GetResponseStream()))
{
var feedContents = reader.ReadToEnd();
//...
}
.
var document = XDocument.Parse(feedContents);
var posts = (from p in document.Descendants("item")
select new
{
Title = p.Element("title").Value,
Link = p.Element("link").Value,
Comments = p.Element("comments").Value,
PubDate = DateTime.Parse(p.Element("pubDate").Value)
}).ToList();
이제 결과를 반복 할 수 있습니다.
foreach(var post in posts)
{
Console.WriteLine(post.Title);
Console.WriteLine(post.Link);
Console.WriteLine(post.Comments);
Console.WriteLine(post.PubDate);
}
여기에 그냥 출력을 캡처하지만 자신의 블로그 게시물 클래스 또는 당신이 LINQ 쿼리에서 사용할 수있는 비슷한 것을 만들어 주시기 위해 익명 형식을 사용했다.
저는 C#에 익숙해 져 있습니다. 그래서 저는 그것을 회신에 사용했습니다. 하지만 쉽게 변환 할 수 있습니다. 사용할 수있는 일부 online converters이 있습니다.
DataSet (이 문제를 구현하는 데 개인적으로 사용하지 않는 문제)과 관련하여 동일한 이름의 노드가있는 항목 (블로그 게시물)이 원인입니다. 예를 들어
:
<comments>...</comments>
<slash:comments>5</slash:comments>
물론 두 번째는 다른 네임 스페이스 (슬래시)를 가지고 있지만, 데이터 집합의되는 ReadXml (...) 메소드는 네임 스페이스에 대해 상관하지 않는다. "comments"라는 두 번째 열을 만들려고합니다. 그것이 예외를받는 이유입니다.
원할 경우 DataSet/DataTable을 계속 사용할 수 있습니다. 위와 같이 LINQ to XML을 사용하여 피드의 데이터를 추출하면됩니다.
그런 다음 데이터 세트를 만들고 여기에 새 테이블을 추가하십시오.
var dataSet = new DataSet();
var blog = new DataTable("Blog");
blog.Columns.Add("Title", typeof(string));
blog.Columns.Add("Link", typeof(string));
blog.Columns.Add("Comments", typeof(string));
dataSet.Tables.Add(blog);
추출 된 데이터에 반복 처리 및 DataTable에에 추가 :
foreach (var post in posts)
{
var newRow = blog.NewRow();
newRow["Title"] = post.Title;
newRow["Link"] = post.Link;
newRow["Comments"] = post.Comments;
blog.Rows.Add(newRow);
}
짜잔는, 우리는 이제 더 이상 데이터 집합의되는 ReadXml (...) 방법에 의존함으로써 문제를 해결했습니다. 피드를 다운로드하고 관심있는 데이터를 추출하여 보관하십시오.
고마워요! 이것은 데이터 테이블을 사용하는 것보다 훨씬 낫습니다. 게시물을 날짜순으로 정렬하는 방법이 있습니까 (가장 최근 게시물이 상단에 있는지 확인하기 만하면됩니까). – Zishan
@Christophe : .NET 3.5 이후 RSS에 기본 클래스 라이브러리가 내장되었습니다. 두 줄의 코드로 RSS를로드 할 수 있습니다. –
@Zishan : 물론, 게시물 IEnumerable (예 : posts.OrderByDescending (p => p.PubDate))을 정렬하십시오. –