Here you can find the source of getNodeTexts(Node node, String... nodePath)
public static List<String> getNodeTexts(Node node, String... nodePath)
//package com.java2s; import org.w3c.dom.*; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; public class Main { public static List<String> getNodeTexts(Node node, String... nodePath) { List<Node> nodes = getNodes(node, nodePath); if (nodes != null) { List<String> strs = new ArrayList<>(nodes.size()); for (Node n : nodes) { strs.add(n.getTextContent()); }//from ww w .j a v a 2s. c om return strs; } else { return null; } } public static List<Node> getNodes(Node node, Pattern... nodePath) { List<Node> res = new ArrayList<>(); getMatchingNodes(node, nodePath, 0, res); return res; } public static List<Node> getNodes(Node node, String... nodePath) { List<Node> res = new ArrayList<>(); getMatchingNodes(node, nodePath, 0, res); return res; } private static void getMatchingNodes(Node node, Pattern[] nodePath, int cur, List<Node> res) { if (cur < 0 || cur >= nodePath.length) return; boolean last = (cur == nodePath.length - 1); Pattern pattern = nodePath[cur]; NodeList children = node.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node c = children.item(i); if (pattern.matcher(c.getNodeName()).matches()) { if (last) { res.add(c); } else { getMatchingNodes(c, nodePath, cur + 1, res); } } } } private static void getMatchingNodes(Node node, String[] nodePath, int cur, List<Node> res) { if (cur < 0 || cur >= nodePath.length) return; boolean last = (cur == nodePath.length - 1); String name = nodePath[cur]; if (node.hasChildNodes()) { NodeList children = node.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node c = children.item(i); if (name.equals(c.getNodeName())) { if (last) { res.add(c); } else { getMatchingNodes(c, nodePath, cur + 1, res); } } } } } }