private Hashtable BuildKeyTable(Key key, XPathNavigator root) { Hashtable keyTable = new Hashtable(); string matchStr = this.processor.GetQueryExpression(key.MatchKey); Query matchExpr = this.processor.GetCompiledQuery(key.MatchKey); Query useExpr = this.processor.GetCompiledQuery(key.UseKey); XPathNodeIterator sel = root.SelectDescendants(XPathNodeType.All, /*matchSelf:*/ false); while(sel.MoveNext()) { XPathNavigator node = sel.Current; EvaluateKey(node, matchExpr, matchStr, useExpr, keyTable); if (node.MoveToFirstAttribute()) { do { EvaluateKey(node, matchExpr, matchStr, useExpr, keyTable); } while (node.MoveToNextAttribute()); node.MoveToParent(); } } return keyTable; }