大きな XML ドキュメントがあり、C# を使用してコンテンツをクエリしています。次のようなものがあります。
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]");
ご覧のとおり、"yearPublished" のフィルターは各クエリで繰り返されます。間違っている場合は訂正してください。書籍のリスト全体が繰り返し解析されます。次のようなものを用意した方が効率的でしょうか。
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]");
ドキュメントが大きいと仮定すると (数千冊の本に関するデータが含まれているとしましょう)、最初の基準に基づいてデータをフィルター処理し、フィルター処理されたリストから目的の XmlNode を選択する方が効率的であると思いますか?
第二に、私は自分の仮定を検証しようとしていましたが、問題が発生しています。SelectSingleNode に関するエラー メッセージが表示されます。
'System.Xml.XmlNodeList' には 'SelectSingleNode' の定義が含まれておらず、タイプ 'System.Xml.XmlNodeList' の最初の引数を受け入れる拡張メソッド 'SelectSingleNode' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか? ?)
System.Xml への参照と、「System.Xml の使用」も参照しています。他に何か不足していますか?