Ich schreibe Code um, der ein XmlDocument zum Parsen von XML verwendet. Ich möchte stattdessen einen XmlReader verwenden, um zu sehen, ob ich einige Leistungsverbesserungen erzielen kann. Die Struktur des XML sieht wie folgt aus:Verwenden der XmlReader-Klasse zum Parsen von XML mit gleichnamigen Elementen
<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>
Grundsätzlich muss ich durch alle <item>
Elemente iterieren. Wie ich schon sagte, arbeitet der alte Code wie folgt aus:
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];
}
Dies funktioniert gut, aber ich denke, ein XmlReader schneller wäre. Also habe ich dieses geschrieben:
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();
}
}
jedoch dieser Code nur liest das erste <item>
Element. Die ReadOuterXml() bricht die Schleife. Weiß jemand, wie man das schafft? Oder ist diese Art des Parsens mit einem XmlReader nicht möglich? Ich habe mit dieser mit .NET Version 2 :(So tun, ich nicht LINQ verwenden können
Was passiert nach dem ersten Element? Welches Debugging hast du gemacht? Ist dein Originalcode * eigentlich * zu langsam? (Schreiben Sie keinen schwierigeren Code, nur um potentiell * Dinge schneller zu machen, wenn sie bereits schnell genug sind ...) –
das ist keine Antwort, aber ... benutzen Sie xsd2code? Ist sehr nützlich, um XML nach Klassen zu analysieren –
Was ist der Rückgabewert davon? new StringReader (xml) .ReadToEnd() – laszlokiss88