Чтение стека переполнения RSS-канал - PullRequest
1 голос
/ 02 февраля 2009

Я пытаюсь получить список неотвеченных вопросов из фида , но у меня возникают проблемы с его чтением.

const string RECENT_QUESTIONS = "https://stackoverflow.com/feeds";

XmlTextReader reader;
XmlDocument doc;

// Load the feed in
reader = new XmlTextReader(RECENT_QUESTIONS);
//reader.MoveToContent();

// Add the feed to the document
doc = new XmlDocument();
doc.Load(reader);

// Get the <feed> element
XmlNodeList feed = doc.GetElementsByTagName("feed");

// Loop through each item under feed and add to entries
IEnumerator ienum = feed.GetEnumerator();
List<XmlNode> entries = new List<XmlNode>();
while (ienum.MoveNext())
{
    XmlNode node = (XmlNode)ienum.Current;
    if (node.Name == "entry")
    {
        entries.Add(node);
    }
}

// Send entries to the data grid control
question_list.DataSource = entries.ToArray();

Я ненавижу публиковать такой вопрос "пожалуйста исправьте код", но я действительно застрял. Я пробовал несколько учебных пособий (некоторые из которых дают ошибки компиляции), но безрезультатно. Я предполагаю, что иду правильным путем, используя XmlReader и XmlDocument, поскольку это было обычным делом для каждого руководства.

1 Ответ

4 голосов
/ 02 февраля 2009

Ваш перечислитель ienum содержит только элемент, элемент <feed>. Ничего не добавляется к entries, так как имя этого узла не entry.

Полагаю, вы хотите перебирать дочерние узлы элемента <feed>. Попробуйте следующее:

const string RECENT_QUESTIONS = "http://stackoverflow.com/feeds";

XmlTextReader reader;
XmlDocument doc;

// Load the feed in
reader = new XmlTextReader(RECENT_QUESTIONS);
//reader.MoveToContent();

// Add the feed to the document
doc = new XmlDocument();
doc.Load(reader);

// Get the <feed> element.
XmlNodeList feed = doc.GetElementsByTagName("feed");
XmlNode feedNode = feed.Item(0);

// Get the child nodes of the <feed> element.
XmlNodeList childNodes = feedNode.ChildNodes;
IEnumerator ienum = childNodes.GetEnumerator();

List<XmlNode> entries = new List<XmlNode>();

// Iterate over the child nodes.
while (ienum.MoveNext())
{
    XmlNode node = (XmlNode)ienum.Current;
    if (node.Name == "entry")
    {
        entries.Add(node);
    }
}

// Send entries to the data grid control
question_list.DataSource = entries.ToArray();
...