Search in sources :

Example 1 with XPath

use of com.sun.org.apache.xpath.internal.XPath in project jdk8u_jdk by JetBrains.

the class XalanXPathAPI method createXPath.

private XPath createXPath(String str, PrefixResolver prefixResolver) throws TransformerException {
    XPath xpath = null;
    Class<?>[] classes = new Class<?>[] { String.class, SourceLocator.class, PrefixResolver.class, int.class, ErrorListener.class, FunctionTable.class };
    Object[] objects = new Object[] { str, null, prefixResolver, Integer.valueOf(XPath.SELECT), null, funcTable };
    try {
        Constructor<?> constructor = XPath.class.getConstructor(classes);
        xpath = (XPath) constructor.newInstance(objects);
    } catch (Exception ex) {
        if (log.isLoggable(java.util.logging.Level.FINE)) {
            log.log(java.util.logging.Level.FINE, ex.getMessage(), ex);
        }
    }
    if (xpath == null) {
        xpath = new XPath(str, null, prefixResolver, XPath.SELECT, null);
    }
    return xpath;
}
Also used : XPath(com.sun.org.apache.xpath.internal.XPath) ErrorListener(javax.xml.transform.ErrorListener) FunctionTable(com.sun.org.apache.xpath.internal.compiler.FunctionTable) SourceLocator(javax.xml.transform.SourceLocator) PrefixResolver(com.sun.org.apache.xml.internal.utils.PrefixResolver) XObject(com.sun.org.apache.xpath.internal.objects.XObject) TransformerException(javax.xml.transform.TransformerException)

Example 2 with XPath

use of com.sun.org.apache.xpath.internal.XPath in project freemarker by apache.

the class SunInternalXalanXPathSupport method executeQuery.

public synchronized TemplateModel executeQuery(Object context, String xpathQuery) throws TemplateModelException {
    if (!(context instanceof Node)) {
        if (context != null) {
            if (isNodeList(context)) {
                int cnt = ((List) context).size();
                if (cnt != 0) {
                    throw new TemplateModelException("Cannot perform an XPath query against a node set of " + cnt + " nodes. Expecting a single node." + ERRMSG_RECOMMEND_JAXEN);
                } else {
                    throw new TemplateModelException(ERRMSG_EMPTY_NODE_SET);
                }
            } else {
                throw new TemplateModelException("Cannot perform an XPath query against a " + context.getClass().getName() + ". Expecting a single org.w3c.dom.Node.");
            }
        } else {
            throw new TemplateModelException(ERRMSG_EMPTY_NODE_SET);
        }
    }
    Node node = (Node) context;
    try {
        XPath xpath = new XPath(xpathQuery, null, customPrefixResolver, XPath.SELECT, null);
        int ctxtNode = xpathContext.getDTMHandleFromNode(node);
        XObject xresult = xpath.execute(xpathContext, ctxtNode, customPrefixResolver);
        if (xresult instanceof XNodeSet) {
            NodeListModel result = new NodeListModel(node);
            result.xpathSupport = this;
            NodeIterator nodeIterator = xresult.nodeset();
            Node n;
            do {
                n = nodeIterator.nextNode();
                if (n != null) {
                    result.add(n);
                }
            } while (n != null);
            return result.size() == 1 ? result.get(0) : result;
        }
        if (xresult instanceof XBoolean) {
            return ((XBoolean) xresult).bool() ? TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE;
        }
        if (xresult instanceof XNull) {
            return null;
        }
        if (xresult instanceof XString) {
            return new SimpleScalar(xresult.toString());
        }
        if (xresult instanceof XNumber) {
            return new SimpleNumber(Double.valueOf(((XNumber) xresult).num()));
        }
        throw new TemplateModelException("Cannot deal with type: " + xresult.getClass().getName());
    } catch (TransformerException te) {
        throw new TemplateModelException(te);
    }
}
Also used : XPath(com.sun.org.apache.xpath.internal.XPath) NodeIterator(org.w3c.dom.traversal.NodeIterator) TemplateModelException(freemarker.template.TemplateModelException) XNull(com.sun.org.apache.xpath.internal.objects.XNull) XNumber(com.sun.org.apache.xpath.internal.objects.XNumber) Node(org.w3c.dom.Node) XBoolean(com.sun.org.apache.xpath.internal.objects.XBoolean) SimpleScalar(freemarker.template.SimpleScalar) XNodeSet(com.sun.org.apache.xpath.internal.objects.XNodeSet) SimpleNumber(freemarker.template.SimpleNumber) XString(com.sun.org.apache.xpath.internal.objects.XString) List(java.util.List) XObject(com.sun.org.apache.xpath.internal.objects.XObject) TransformerException(javax.xml.transform.TransformerException)

Aggregations

XPath (com.sun.org.apache.xpath.internal.XPath)2 XObject (com.sun.org.apache.xpath.internal.objects.XObject)2 TransformerException (javax.xml.transform.TransformerException)2 PrefixResolver (com.sun.org.apache.xml.internal.utils.PrefixResolver)1 FunctionTable (com.sun.org.apache.xpath.internal.compiler.FunctionTable)1 XBoolean (com.sun.org.apache.xpath.internal.objects.XBoolean)1 XNodeSet (com.sun.org.apache.xpath.internal.objects.XNodeSet)1 XNull (com.sun.org.apache.xpath.internal.objects.XNull)1 XNumber (com.sun.org.apache.xpath.internal.objects.XNumber)1 XString (com.sun.org.apache.xpath.internal.objects.XString)1 SimpleNumber (freemarker.template.SimpleNumber)1 SimpleScalar (freemarker.template.SimpleScalar)1 TemplateModelException (freemarker.template.TemplateModelException)1 List (java.util.List)1 ErrorListener (javax.xml.transform.ErrorListener)1 SourceLocator (javax.xml.transform.SourceLocator)1 Node (org.w3c.dom.Node)1 NodeIterator (org.w3c.dom.traversal.NodeIterator)1