private void CollectIndex (XPathNavigator nav, XPathNavigator target, Hashtable map, XslKey key) { XPathNodeIterator iter; switch (key.Use.ReturnType) { case XPathResultType.NodeSet: iter = nav.Select (key.Use); while (iter.MoveNext ()) AddIndex (iter.Current.Value, target, map); break; case XPathResultType.Any: object o = nav.Evaluate (key.Use); iter = o as XPathNodeIterator; if (iter != null) { while (iter.MoveNext ()) AddIndex (iter.Current.Value, target, map); } else AddIndex (XPathFunctions.ToString (o), target, map); break; default: string keyValue = nav.EvaluateString (key.Use, null, null); AddIndex (keyValue, target, map); break; } }