Java tutorial
//package com.java2s; import org.w3c.dom.*; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; public class Main { static public List<String> getNodeTexts(Node node, String... nodePath) { List<Node> nodes = getNodes(node, nodePath); if (nodes != null) { List<String> strs = new ArrayList<String>(nodes.size()); for (Node n : nodes) { strs.add(n.getTextContent()); } return strs; } else { return null; } } static public List<Node> getNodes(Node node, Pattern... nodePath) { List<Node> res = new ArrayList<Node>(); getMatchingNodes(node, nodePath, 0, res); return res; } static public List<Node> getNodes(Node node, String... nodePath) { List<Node> res = new ArrayList<Node>(); getMatchingNodes(node, nodePath, 0, res); return res; } static private 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); } } } } static private 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); } } } } } }