Ich habe Code ähnlich dem ersten unterVerhalten von LoadXml und Select
String xml1 =
@"<resultset>
<result>
<alamakota />
</result>
</resultset>";
String xml2 =
@"<resultset/>";
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml1);
XmlNodeList nodes1 = xDoc.SelectNodes("/resultset/result");
xDoc.LoadXml(xml2);
XmlNodeList nodes2 = xDoc.SelectNodes("/resultset/result");
Console.WriteLine(nodes1.Count);
Console.WriteLine(nodes2.Count);
würde ich erwarten, dass Console.WriteLine Methoden gibt 1 und 0, aber nicht immer. Im normalen Programmlauf wird es doppelt 0 geben. Auch beim Debuggen, wenn ich Haltepunkt auf zweite SelectNodes setze und den Wert von nodes1.Count in VS überprüfe, gibt es mir 1 und 0 am Ende. Es scheint, dass Select während erste Prüfung von XmlNodeList und nicht in Zeile ausgewertet wird, wo es in Code, unten zum Beispiel Code 1 und 0 jedes Mal geben läuft
String xml1 =
@"<resultset>
<result>
<alamakota />
</result>
</resultset>";
String xml2 =
@"<resultset/>";
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml1);
XmlNodeList nodes1 = xDoc.SelectNodes("/resultset/result");
Int32 c1 = nodes1.Count;
xDoc.LoadXml(xml2);
XmlNodeList nodes2 = xDoc.SelectNodes("/resultset/result");
Console.WriteLine(nodes1.Count);
Console.WriteLine(nodes2.Count);
Ich weiß, dass ich tun xDoc kann = new XmlDocument() nach dem ersten SelectNodes und es wird wie erwartet funktionieren, aber ich frage mich, ob es so funktionieren sollte, weil ich dieses Szenario nicht bei msdn finden kann. Wenn ja, warum? Bitte weisen Sie mich auf eine Dokumentation hin.
Interessant, gibt es einen Grund, warum Sie LINQ zu XML nicht verwenden können? Das ist in der Regel eine eher saubere API für den Umgang mit XML ... –
Technisch keine. Es ist meine Wahl, weil ich XPath in anderen Systemen verwende, in denen LINQ nicht verfügbar ist. – pen2
@ pen2 - Sie können XPath mit LINQ to XML verwenden. Siehe zum Beispiel [Wie verwende ich XPath mit XElement oder LINQ?] (Https://stackoverflow.com/questions/3642829/how-to-use-xpath-with-xelement-or-linq). – dbc