Java XPath Find findAll(Node root, String xPath)

Here you can find the source of findAll(Node root, String xPath)

Description

Finds all nodes matching the xPath

License

Open Source License

Parameter

Parameter Description
root the node where to start searching
xPath the xPath

Return

an unmodifiable list of all matching nodes, empty is none found

Declaration

public static List<Node> findAll(Node root, String xPath) 

Method Source Code

//package com.java2s;
/*//from  w w w. j av a2  s . c om
 * Copyright 2015, 2016 Manfred Hantschel
 * 
 * This file is part of Climate-Tray.
 * 
 * Climate-Tray 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 any later version.
 * 
 * Climate-Tray 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 Climate-Tray. If not, see
 * <http://www.gnu.org/licenses/>.
 */

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

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 {
    /**
     * Finds all nodes matching the xPath
     *
     * @param root the node where to start searching
     * @param xPath the xPath
     * @return an unmodifiable list of all matching nodes, empty is none found
     */
    public static List<Node> findAll(Node root, String xPath) {
        List<Node> result = new ArrayList<Node>();
        NodeList childNodes;

        try {
            childNodes = (NodeList) (xPath(xPath).evaluate(root, XPathConstants.NODESET));
        } catch (XPathExpressionException e) {
            throw new IllegalArgumentException("Invalid expression: " + xPath, e);
        }

        for (int i = 0; i < childNodes.getLength(); i += 1) {
            result.add(childNodes.item(i));
        }

        return Collections.unmodifiableList(result);
    }

    /**
     * Creates an xPath expression
     *
     * @param xPath the xPath
     * @return the expression
     */
    public static XPathExpression xPath(String xPath) {
        XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xPathInstance = xPathFactory.newXPath();

        try {
            return xPathInstance.compile(xPath);
        } catch (XPathExpressionException e) {
            throw new IllegalArgumentException("Invalid xPath: " + xPath, e);
        }
    }
}

Related

  1. findAll(Node node, String xpath)
  2. findNode(String xPathExpression, Element root)
  3. findNodeByXPath(Node base, String xpath)
  4. findNodeByXpath(String xpathExpression, String fileName)
  5. findNodeByXPath(String xPathString, Object source)