Long ago, I needed to find specific XML element with XPath in Java. Here you go:
package xpath; import java.io.IOException; import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; 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.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class TestXPath { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); String xml = "<someRootElement>" + "<bases>" + "<base>" + "<name>jazzz</name>" + "<description>hello</description>" + "<level1>" + "<level2>" + "<name>Hi</name>" + "<value>1.5</value>" + "</level2>" + "<level2>" + "<name>Hello</name>" + "<value>0</value>" + "</level2>" + "<level2>" + "<name>There</name>" + "<value>24</value>" + "</level2>" + "</level1>" + "</base>" + "<base>" + "<name>baran</name>" + "<description>goodbye</description>" + "<level1>" + "<level2>" + "<name>Hi</name>" + "<value>1.5</value>" + "</level2>" + "<level2>" + "<name>Hello</name>" + "<value>0</value>" + "</level2>" + "<level2>" + "<name>There</name>" + "<value>24</value>" + "</level2>" + "</level1>" + "</base>" + "</bases>" + "</someRootElement>" ; // Build a 'Document' instance to represent the XML (note that this could come from a File of via a Socket in a networked app) Document doc = builder.parse(new InputSource(new StringReader(xml))); // Create the XPath objects ahead of time XPath xPath = XPathFactory.newInstance().newXPath(); XPathExpression baseExpr = xPath.compile("//base"); XPathExpression nameExpr = xPath.compile("name"); XPathExpression descExpr = xPath.compile("description"); // Get the list of 'base' elements from 'doc' NodeList nodeset = (NodeList) baseExpr.evaluate(doc, XPathConstants.NODESET); for (int i = 0; i < nodeset.getLength(); i++) { Node node = nodeset.item(i); // For each 'base' Node, evaluate the expressions to retrieve 'name' and 'description' String name = nameExpr.evaluate(node); String desc = descExpr.evaluate(node); // Show the result System.out.println("Name = '" + name + "', Description = '" + desc + "'"); } } }