2012-02-17 99 views
4

我不知道這一點,我有內置的頁面,其中包含一個gridview來描述日常輸入數據分成不同作者的列,它看起來像一個excel文件。底部有一個Atom鏈接。Atom xml使用C#讀取

如果我點擊一行的鏈接,尤其是帖子的作者,我將被引導到作者的屬性頁面,其中將會有名稱,當前完成的工作以及他寫了多少書(50/70 80%被稱爲狀態等),我想知道如何讀取這些信息並以相關應用程序的另一個視圖顯示它;那是我只知道提要的URL,我真的不知道如何做到這一點。感謝您的任何幫助。

+0

我其實今天這個上工作,可惜我沒有包裹着我周圍的頭完全尚未。我知道我將使用DataContract來使用XML並將其作爲對象提供。 – 2012-02-17 17:25:01

+0

http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx – SLaks 2012-02-17 17:26:20

+0

http://stackoverflow.com/questions/9329067/reading-wordpress-rss-with-c-sharp -content-different/ – 2012-02-17 17:28:04

回答

2

我還沒有嘗試過使用DataContractSerializer和專門的XML格式,但是XmlSerializer可以讓你設置什麼是屬性和什麼是元素。就我而言,這是最簡單的方法,因爲您可以創建一個很好的對象模型並使用它來讀取任何XML。這是一個讀取原子進給的示例。您將需要執行HttpWebRequest來獲取XML(這非常簡單),然後使用XmlSerializer來反序列化Feed。

[XmlType(TypeName = "feed", Namespace = "http://www.w3.org/2005/Atom")] 
public class Feed 
{ 
    [XmlElement(ElementName = "title")] 
    public string Title { get; set; } 

    [XmlElement(ElementName = "updated")] 
    public DateTime? Updated { get; set; } 

    [XmlElement(ElementName = "id")] 
    public string Id { get; set; } 

    [XmlElement(ElementName = "link")] 
    public Link Link { get; set; } 

    [XmlElement(ElementName = "entry")] 
    public List<Entry> Entries { get; set; } 

    public Feed() 
    { 
     Entries = new List<Entry>(); 
    } 
} 

public class Entry 
{ 
    [XmlElement(ElementName = "title")] 
    public string Title { get; set; } 

    [XmlElement(ElementName = "updated")] 
    public DateTime? Updated { get; set; } 

    [XmlElement(ElementName = "id")] 
    public string Id { get; set; } 

    [XmlElement(ElementName = "link")] 
    public Link Link { get; set; } 

    [XmlElement(ElementName = "summary")] 
    public string Summary { get; set; } 
} 

public class Link 
{ 
    [XmlAttribute(AttributeName = "href")] 
    public string Href { get; set; } 
} 

這裏是寫入/讀出的進料工作樣品:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Feed feed = new Feed(); 
     feed.Title = "Exmple Feed"; 
     feed.Updated = DateTime.Now; 
     feed.Link = new Link { Href = "http://example.org/" }; 

     feed.Entries.Add(
     new Entry 
     { 
      Title = "Atom-Powered Robots Run Amok", 
      Link = new Link { Href = "http://example.org/2003/12/13/atom03" }, 
      Updated = DateTime.Now, 
      Summary = "Some text." 
     }); 

     XmlSerializer serializer = new XmlSerializer(typeof(Feed), "http://www.w3.org/2005/Atom"); 

     using (StreamWriter sw = new StreamWriter("c:\\testatom.xml")) 
     { 
      serializer.Serialize(sw, feed); 
     } 

     using (StreamReader sr = new StreamReader("c:\\testatom.xml")) 
     { 
      Feed readFeed = serializer.Deserialize(sr) as Feed; 
     } 
    } 
} 
+0

這很美! :-) – 2012-07-16 01:49:40

+0

imo這比System.ServiceModel.Syndication好多了 – 2012-09-28 02:26:26

0

最好起點是使用SyndicationFeed,它映射到Atom 1.0和RSS 2.0標準。你需要一個基本的實現都應該提供給您:

XmlReader reader = XmlReader.Create("http://localhost/feeds/serializedFeed.xml"); 
SyndicationFeed feed = SyndicationFeed.Load(reader); 

// Feed title 
Console.WriteLine(feed.Title.Text); 

foreach(var item in feed.Items) 
{ 
    // Each item 
    Console.WriteLine("Title: {0}", item.Title.Text); 
    Console.WriteLine("Summary: {0}", ((TextSyndicationContent)item.Summary).Text); 
} 

或許,如果你有一些定製要求,或要處理的RSS數據不同於此標準,那麼道格的答案會是要走的路。


有用的參考資料: