Sto riscrivendo del codice che utilizza un XmlDocument per analizzare alcuni XML. Voglio utilizzare un XmlReader per vedere se riesco a ottenere alcuni miglioramenti delle prestazioni. La struttura del file XML è simile al seguente:Utilizzo della classe XmlReader per analizzare XML con elementi con lo stesso nome
<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>
Fondamentalmente, ho bisogno di scorrere tutti gli elementi <item>
. Come ho detto, il vecchio codice funziona così:
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];
}
Questo funziona bene, ma credo che con un XmlReader sarebbe più veloce. Così ho scritto questo:
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();
}
}
Tuttavia, questo codice si legge solo il primo elemento <item>
. ReadOuterXml() interrompe il ciclo. Qualcuno sa come aggirare questo? Oppure questo tipo di analisi non è possibile con un XmlReader? Ho dover fare questa versione di .NET utilizzando 2 :(quindi non posso usare LINQ
Cosa succede dopo il primo elemento? Che debugging hai fatto? Il tuo codice originale * è effettivamente * troppo lento? (Non scrivere codice più difficile solo per * potenzialmente * rendere le cose più veloci se sono già abbastanza veloci ...) –
questa non è una risposta, ma ... hai usato xsd2code? È molto utile analizzare il codice XML nelle classi –
Qual è il valore restituito da questo? new StringReader (xml) .ReadToEnd() – laszlokiss88