Java XPath Find findNodeByXPath(String xPathString, Object source)

Here you can find the source of findNodeByXPath(String xPathString, Object source)

Description

find Node By X Path

License

Open Source License

Declaration

public static Node findNodeByXPath(String xPathString, Object source) throws XPathExpressionException 

Method Source Code


//package com.java2s;
/*//from  ww  w  .  ja va2 s . c  om
   Copyright (c) 2009-2011 Olivier Chafik, All Rights Reserved
       
   This file is part of JNAerator (http://jnaerator.googlecode.com/).
       
   JNAerator is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
       
   JNAerator is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
       
   You should have received a copy of the GNU General Public License
   along with JNAerator.  If not, see <http://www.gnu.org/licenses/>.
*/

import java.lang.ref.SoftReference;
import java.util.LinkedHashMap;

import java.util.Map;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Main {
    public static Map<String, SoftReference<XPathExpression>> xPathExpressionsCache = new LinkedHashMap<String, SoftReference<XPathExpression>>();
    private static SoftReference<XPath> sharedXPath;

    public static Node findNodeByXPath(String xPathString, Object source) throws XPathExpressionException {
        NodeList list = (NodeList) getXPathExpression(xPathString).evaluate(source, XPathConstants.NODESET);
        int len = list.getLength();
        return len == 0 ? null : list.item(0);
    }

    public static XPathExpression getXPathExpression(String xPathString) throws XPathExpressionException {
        SoftReference<XPathExpression> ref = xPathExpressionsCache.get(xPathString);
        XPathExpression expression = ref == null ? null : ref.get();
        if (expression == null)
            xPathExpressionsCache.put(xPathString,
                    new SoftReference<XPathExpression>(expression = getSharedXPath().compile(xPathString)));

        return expression;
    }

    public static XPath getSharedXPath() {
        XPath xPath = null;
        if (sharedXPath != null)
            xPath = sharedXPath.get();
        if (xPath == null) {
            XPathFactory xPathFactory = XPathFactory.newInstance();
            sharedXPath = new SoftReference<XPath>(xPath = xPathFactory.newXPath());
        }
        return xPath;
    }
}

Related

  1. findAll(Node node, String xpath)
  2. findAll(Node root, String xPath)
  3. findNode(String xPathExpression, Element root)
  4. findNodeByXPath(Node base, String xpath)
  5. findNodeByXpath(String xpathExpression, String fileName)
  6. findNodes(final Node node, final String expression)
  7. findNodesByXPath(Node contextNode, String expression)
  8. query(Node context, String query)
  9. querySingle(Node node, String xpathQuery, final String filePath)