À l'aide de la classe XmlReader pour parser du XML avec des éléments du même nom

Je suis ré-écriture du code qui utilise un XmlDocument pour parser du XML. Je veux utiliser un XmlReader au lieu de voir si je peux obtenir quelques améliorations de performances.
La structure du XML ressemble à ceci:

<items>
   <item id="1" desc="one">
      <itemBody date="2012-11-12" />
   </item>
   <item id="2" desc="two">
      <itemBody date="2012-11-13" />
   </item>
   <item id="3" desc="three">
      <itemBody date="2012-11-14" />
   </item>
   <item id="4" desc="four">
      <itemBody date="2012-11-15" />
   </item>
</items>

En gros, j'ai besoin de parcourir tous les <item> éléments. Comme je l'ai dit, l'ancien code fonctionne comme ceci:

XmlDocument document = new XmlDocument();

//load XML into XmlDocument
document.LoadXml(xml);

//use xpath to split into individual item
string xPath = @"items/item";
XmlNodeList nodeList = document.SelectNodes(xPath);

//loop through each item
for (int nodeIndex = 0; nodeIndex < nodeList.Count; nodeIndex++)
{
    //do something with the XmlNode
    nodeList[nodeIndex];
}

Cela fonctionne bien, mais je pense que l'utilisation d'un XmlReader serait plus rapide. J'ai donc écrit ceci:

XmlReader xmlReader = XmlReader.Create(new StringReader(xml));

while (xmlReader.Read())
{                       
   if (xmlReader.Name.Equals("item") && (xmlReader.NodeType == XmlNodeType.Element))
   {
      string id = xmlReader.GetAttribute("id");                 
      string desc = xmlReader.GetAttribute("desc");
      string elementXml = xmlReader.ReadOuterXml();
   }
}

Toutefois, ce code ne lit que la première <item> élément. Le ReadOuterXml() est la rupture de la boucle. Quelqu'un sait comment contourner ce problème? Ou est ce type d'analyse n'est pas possible avec un XmlReader? J'ai l'obligation de le faire à l'aide .NET version 2 🙁 Donc je ne peux pas utiliser LINQ.

Ce qui se passe après le premier élément? Ce que le débogage avez-vous fait? Est votre code original en fait, trop lent? (Ne pas écrire plus de code difficile juste pour éventuellement rendre les choses plus vite si ils sont déjà assez vite...)
ce n'est pas une réponse, mais... avez-vous utilisé xsd2code? Est très utile pour analyser le langage xml pour les classes
Quelle est la valeur de retour de cette? nouveau StringReader(xml).ReadToEnd()

OriginalL'auteur Matt Puleston | 2012-11-30