public abstract ResolveVariable ( string prefix, string name ) : IXsltContextVariable | ||
prefix | string | |
name | string | |
return | IXsltContextVariable |
internal override void SetXsltContext(XsltContext context) { if (context == null) { throw new XPathException(Res.Xp_UndefinedXsltContext, Prefix, Name); } if(xsltContextVariable == null) { xsltContextVariable = context.ResolveVariable(Prefix, Name); Debug.Assert(xsltContextVariable != null, "XSLT has to resolve it or throw exception"); } else { Debug.Assert(xsltContextVariable == context.ResolveVariable(Prefix, Name), "ResolveVariable supposed to return the same VariableAction each time"); } Object result = xsltContextVariable.Evaluate(context); if (result is double) { _VarQuery = new OperandQuery(result, XPathResultType.Number); } else if (result is String) { _VarQuery = new OperandQuery(result, XPathResultType.String); } else if (result is Boolean) { _VarQuery = new OperandQuery(result, XPathResultType.Boolean); } else if (result is XPathNavigator) { _VarQuery = new NavigatorQuery((XPathNavigator)result); } else if (result is ResetableIterator) { ResetableIterator it = result as ResetableIterator; _VarQuery = new XmlIteratorQuery( (ResetableIterator) it.Clone() ); } else if (result is XPathNodeIterator) { Debug.Assert(false, "Unexpected type of XPathNodeIterator"); throw new NotSupportedException(Res.GetString(Res.XmlUnsupportedType, result.GetType().FullName)); } else if (result is int) { _VarQuery = new OperandQuery(XmlConvert.ToXPathDouble(result), XPathResultType.Number); } else { if (result == null) { throw new XPathException(Res.Xslt_InvalidVariable, Name); } Debug.Assert(false, "Unexpected variable type"); throw new NotSupportedException(Res.GetString(Res.XmlUnsupportedType, result.GetType().FullName)); } Debug.Assert(_VarQuery != null); }
public override void SetXsltContext(XsltContext context) { if (context == null) { throw XPathException.Create(Res.Xp_NoContext); } if (this.xsltContext != context) { xsltContext = context; variable = xsltContext.ResolveVariable(prefix, name); // Since null is allowed for ResolveFunction, allow it for ResolveVariable as well if (variable == null) { throw XPathException.Create(Res.Xp_UndefVar, QName); } } }