我有一个大型 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”。我还缺少其他东西吗?