Filterung XmlNodeList mit weiteren XPath-Abfrage?

Ich habe eine große XML-Dokument, und ich bin mit C# für die Abfrage der Inhalte. Ich habe etwas ähnliches wie die folgenden:

var bookA = xmlDoc.SelectSingleNode("/books/book[yearPublished=2012 and id=123]");
var bookB = xmlDoc.SelectSingleNode("/books/book[yearPublished=2012 and id=456]");
var bookC = xmlDoc.SelectSingleNode("/books/book[yearPublished=2012 and id=789]");

Wie Sie sehen können, wird der filter auf "yearPublished", wiederholt sich in jeder Abfrage und, bitte korrigiert mich wenn ich falsch bin, wird die gesamte Liste der Bücher, die analysiert wird, wiederholt. Wäre es effizienter sein, um so etwas wie die folgenden:

var newBooks = xmlDoc.SelectNodes("/books/book[yearPublished=2012]");
var bookA = newBooks.SelectSingleNode("book[id=123]");
var bookB = newBooks.SelectSingleNode("book[id=456]");
var bookC = newBooks.SelectSingleNode("book[id=789]");

Vorausgesetzt, mein Dokument ist groß (sagen wir, es enthält die Daten über mehrere tausend Bücher), bin ich richtig, dass es effizienter wäre, die Daten zu filtern, basierend auf dem ersten Kriterien und wählen Sie dann die gewünschte XmlNode aus der gefilterten Liste?

Zweitens, ich war versuchen zu bestätigen meine Annahme, aber ich bin Probleme. Ich bekomme eine Fehlermeldung über SelectSingleNode:

'- System.Xml.XmlNodeList' enthält keine definition für
'SelectSingleNode" und keine Erweiterung Methode SelectSingleNode'
die Annahme ein erstes argument vom Typ 'System.Xml.XmlNodeList' werden könnte
gefunden (fehlt eine using-Direktive oder ein Assemblyverweis?)

Habe ich einen Verweis auf System.Xml und auch "verwenden System.Xml". Übersehe ich etwas anderes?

  • Das XML ist schon "analysiert", wenn xmlDoc verwendet wird. Nur die XPath-Abfrage zu [re]ausgewertet. Ja, mehrere Male, bedeutet "mehr Arbeit", aber es bedeutet nicht "praktisch" langsamer und es könnte genau so schnell-oder schneller! -- als Iteration, da der ID-Klausel. Der einzige Weg zu wissen, der sicher ist, dass der benchmark.
  • Ich persönlich bevorzuge XDocument - /XElement und Freunde, wie es unterstützt XPath über Erweiterung Methoden. Ist es schneller? Ich weiß nicht, oder Pflege, wie ich die Oberfläche besser, es sieht sauberer aus, zu mir, und ich habe keine solche performance-überlegungen 🙂
InformationsquelleAutor desautelsj | 2012-04-10
Schreibe einen Kommentar