package gnu.xml.xpath;
import java.io.IOException;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFunctionResolver;
import javax.xml.xpath.XPathVariableResolver;
import org.xml.sax.InputSource;
public class XPathImpl
implements XPath
{
XPathParser parser;
NamespaceContext namespaceContext;
XPathVariableResolver variableResolver;
XPathFunctionResolver functionResolver;
XPathImpl(NamespaceContext namespaceContext,
XPathVariableResolver variableResolver,
XPathFunctionResolver functionResolver)
{
parser = new XPathParser();
this.namespaceContext = namespaceContext;
this.variableResolver = variableResolver;
this.functionResolver = functionResolver;
reset();
}
public void reset()
{
parser.namespaceContext = namespaceContext;
parser.variableResolver = variableResolver;
parser.functionResolver = functionResolver;
}
public void setXPathVariableResolver(XPathVariableResolver resolver)
{
parser.variableResolver = resolver;
}
public XPathVariableResolver getXPathVariableResolver()
{
return parser.variableResolver;
}
public void setXPathFunctionResolver(XPathFunctionResolver resolver)
{
parser.functionResolver = resolver;
}
public XPathFunctionResolver getXPathFunctionResolver()
{
return parser.functionResolver;
}
public void setNamespaceContext(NamespaceContext nsContext)
{
parser.namespaceContext = nsContext;
}
public NamespaceContext getNamespaceContext()
{
return parser.namespaceContext;
}
public XPathExpression compile(String expression)
throws XPathExpressionException
{
XPathTokenizer tokenizer = new XPathTokenizer(expression);
try
{
return (Expr) parser.yyparse(tokenizer);
}
catch (IOException e)
{
throw new XPathExpressionException(e);
}
catch (XPathParser.yyException e)
{
throw new XPathExpressionException(expression);
}
}
public Object evaluate(String expression,
Object item,
QName returnType)
throws XPathExpressionException
{
XPathExpression expr = compile(expression);
return expr.evaluate(item, returnType);
}
public String evaluate(String expression,
Object item)
throws XPathExpressionException
{
XPathExpression expr = compile(expression);
return expr.evaluate(item);
}
public Object evaluate(String expression,
InputSource source,
QName returnType)
throws XPathExpressionException
{
XPathExpression expr = compile(expression);
return expr.evaluate(source, returnType);
}
public String evaluate(String expression,
InputSource source)
throws XPathExpressionException
{
XPathExpression expr = compile(expression);
return expr.evaluate(source);
}
}