int nDeclarations = keys.size();
// Walk through each of the declarations made with xsl:key
for (int i = 0; i < nDeclarations; i++)
{
KeyDeclaration kd = (KeyDeclaration) keys.elementAt(i);
// Only continue if the name on this key declaration
// matches the name on the iterator for this walker.
if(!kd.getName().equals(name))
continue;
foundKey = true;
ki.getXPathContext().setNamespaceContext(ki.getPrefixResolver());
// See if our node matches the given key declaration according to
// the match attribute on xsl:key.
double score = kd.getMatch().getMatchScore(ki.getXPathContext(),
testNode);
if (score == kd.getMatch().MATCH_SCORE_NONE)
continue;
// Query from the node, according the the select pattern in the
// use attribute in xsl:key.
XObject xuse = kd.getUse().execute(ki.getXPathContext(), testNode,
ki.getPrefixResolver());
if (xuse.getType() != xuse.CLASS_NODESET)
{
XMLString exprResult = xuse.xstr();