4

I'm trying to get a list of unanswered questions from the feed, but I am having trouble reading it.

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();

I hate to post such a "please fix the code" question, but I'm really stuck. I've tried several tutorials (some giving compile errors) but to no help. I assume I'm going the right way using an XmlReader and an XmlDocument as that's been a common thing from each guide.

3
  • Can you say what errors you are getting and what it is doing incorrectly? Commented Feb 1, 2009 at 21:51
  • 1
    You might consider using msdn.microsoft.com/en-us/library/… instead. Commented Feb 1, 2009 at 21:51
  • @Simucal: It's just not providing any data, no errors as such. @Brian: I looked at that and thought it was for creating feeds only. I'll give it a try. Commented Feb 1, 2009 at 22:00

1 Answer 1

6

Your enumerator ienum contains only element, the <feed> element. Nothing gets added to entries since this node's name is not entry.

I'm guessing you want to iterate over the child nodes of the <feed> element instead. Try the following:

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();
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, this has really helped me to understand how to iterate through XML nodes now!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.