2012-02-17 2 views
4

Я вообще не знаю об этом, у меня есть встроенная страница, содержащая gridview для описания ежедневных входных данных, разделенных на столбцы от разных авторов, это выглядит как файл excel. И внизу есть ссылка Atom.Atom xml читается с C#

Если я нажимаю ссылку на одну строку, особенно автора сообщения, я буду перенаправлен на страницу свойств автора, в которой будет имя, текущая работа и сколько он написал свою книгу (50/70 80% называется статусом и т. Д.), Интересно, как я могу прочитать эту информацию и отобразить ее в другом представлении о соответствующем приложении; то есть я знаю только URL фида, я действительно не знаю, как это можно сделать. Спасибо за любую помощь.

+0

Я на самом деле будет работать на этом сегодня, слишком плохо, я не обернуты мою голову вокруг него полностью еще. Я знаю, что я буду использовать DataContract, чтобы использовать XML и доставлять его как объект. –

+0

http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx – SLaks

+0

http://stackoverflow.com/questions/9329067/reading-wordpress-rss-with-c-sharp -content-different/ –

ответ

2

Я не пытался использовать DataContractSerializer со специализированными форматами XML, но XmlSerializer позволяет вам установить атрибут и элемент. Это самый простой способ, насколько я могу сказать, потому что вы можете создать красивую объектную модель и использовать ее для чтения любого XML. Здесь приведен пример чтения атома. PARTIAL. Вам нужно будет выполнить HttpWebRequest, чтобы получить XML (который довольно прямолинейный), затем используйте XmlSerializer для десериализации фида.

[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

Это красиво! :-) –

+0

imo это намного лучше, чем System.ServiceModel.Syndication –

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 данные иначе, чем этот стандарт, то ответ Дуга будет путь.


Полезные ссылки:

Смежные вопросы