Исходя из моего собственного опыта, добавление 3000 узлов в древовидное представление ASP.NET является плохой вещью, так как состояние представления иссякнет ... то есть оно взорвется и станет действительно большим!
Попробуйте что-нибудь с Javascript на стороне клиента (например, с JQuery) и AJAX-запросами для ускорения загрузки. Использование MVC и клиентской части Javascript также может быть вариантом.
Также по опыту не используйте MS Ajax для обновления дерева, оно не поддерживается.
Для чтения XML Linq to XML может быть достаточно быстрым вариантом. Здесь вы можете найти образец для этого.
Если вам нужно использовать System.Xml, то следующий код получает дочерний элемент для данного идентификатора из документа:
XmlDocument document = new XmlDocument();
XmlNodeList nodes = document.SelectNodes(string.Format("/descendant-or-self::*[@id = '{0}']/*", id));
foreach (XmlNode child in nodes) {
// child contains the child node
}
Это прекрасно работает, когда у вас нет пространств имен, в противном случае, оно становится немного грязным.
Используя Linq для XML, все выглядит примерно так:
XDocument doc = new XDocument();
XElement root = doc.Root;
IEnumerable<XElement> children = doc.Root
.DescendantsAndSelf()
.Where(x => (string) x.Attribute("id") == id)
.SelectMany(x => x.Elements());
foreach (var child in children) {
// do something with the child
}