2015-01-01 5 views
-2

BBC에서 RSS 피드를 구문 분석하려고하지만 아무 것도 반환하지 않습니다! RSS 피드BBC에서 RSS 피드를 읽으려고합니다.

http://www.bbc.co.uk/arabic/middleeast/index.xml 

내 코드

var item = (from descendant in document.Descendants("entry") 
          select new NewsItem() 
          { 
           link = descendant.Element("link").Attribute("href").Value, 
           description = descendant.Element("summary").Value, 
           title = descendant.Element("title").Value, 
           image = " " // entry > link > img media:content > second media:thumbnail > url attribute 
           entry_date = DateTime.Now, 
           category = " " // second descendant.Elements("category") > label 
          }).ToList(); 
+0

RSS 라이브러리를 사용하지 않는 이유는 무엇입니까? https://www.nuget.org/packages?q=rss – Aron

+1

@Aron 라이브러리는 필요하지 않습니다. 이미 .NET 프레임 워크에 내장되어 있습니다. [이전 답변] (http://stackoverflow.com/a/7010922/109702). inbuilt 클래스가 무거운 작업을하게하십시오. – slugster

+0

SyndicationFeed를 사용하고 있었지만 RSS 피드에서 날짜를 게시하려고 할 때 오류가 발생합니다 .. – dotfreelancer

답변

2

당신은 네임 스페이스의 요소를 찾고 있습니다. RSS 피드의 루트 요소에서 :

<feed xmlns="http://www.w3.org/2005/Atom" 
     xmlns:media="http://search.yahoo.com/mrss/" 
     xmlns:dc="http://purl.org/dc/elements/1.1/" 
     xmlns:dcterms="http://purl.org/dc/terms/"> 

xmlns="..." 속성은 하위 요소 (그 중 하나)의 기본 네임 스페이스를 지정합니다.

그래서 당신이 원하는 : 난 그냥 방법을 사용하여, 여기에 쿼리 식을 삭제 한 방법

XNamespace ns = "http://www.w3.org/2005/Atom"; 
var item = document.Descendants(ns + "entry") 
        .Select(entry => new NewsItem 
          { 
           link = entry.Element(ns + "link") 
              .Attribute("href").Value, 
           description = entry.Element(ns + "summary").Value, 
           title = entry.Element(ns + "title").Value, 
           image = " " 
           entry_date = DateTime.Now, 
           category = " " 
          }) 
        .ToList(); 

주 대신 호출 - 쿼리가 바로이 "X에서 Y를 선택"다음 쿼리 식는 cruft에 추가 .

또한 .NET 명명 규칙 (예 : entry_date 대신 EntryDate)을 시작하는 것이 좋습니다. 해당 예제의 값도 잘못되었지만 ...).

편집 : 의견에 명시된 바와 같이 SyndicationFeed 또는 타사 라이브러리를 사용하여 피드를 구문 분석 할 수도 있습니다. 당신은 .NET에서 RSS를 구문 분석 할 첫 번째 사람이 아닙니다 :)

+0

오, 네임 스페이스에 대한 감사 ..하지만 난 값 문제에 대해 물어 봤는데 .. 난 RSS 피드에서 올바른 값을 가져갈 수 없습니다. – dotfreelancer

+0

훌륭한 답변을 떨어 뜨리지 말고 OP에서도 [SyndicationFeed] (http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed%28v=vs.90%)를 사용할 수 있습니다. 29.aspx) 항목을 가져옵니다. – slugster

+0

@dotfreelancer : 올바른 네임 스페이스를보고 있지 않기 때문에 요소를 찾지 못했기 때문에 불가능합니다. 당신은 거기에 없었던 요소들을 찾고 있었기 때문에 아무 것도 찾을 수 없었던 것이 당연합니다. –

관련 문제