Atom XML читается с C # - PullRequest
       3

Atom XML читается с C #

4 голосов
/ 17 февраля 2012

Я совсем не знаю об этом, у меня есть встроенная страница, которая содержит сетку для описания ежедневных входных данных, разделенных на столбцы от разных авторов, она выглядит как файл Excel.А внизу есть ссылка на Atom.

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

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

Я не пытался использовать 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 голосов
/ 24 марта 2015

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...