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;
}