Java HTML / XML How to - Use XPath to parse an XML file for attribute value








Question

We would like to know how to use XPath to parse an XML file for attribute value.

Answer

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
/* www .j  ava2  s. c o m*/
import org.w3c.dom.Document;

public class Main {

  private static final String CFG_FILE = "test.xml";
  private static final String XPATH_FOR_PRM_MaxThread = "/config/param[@id='MaxThread']/text()";

  public static void main(String[] args) throws Exception {
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    docFactory.setNamespaceAware(true);
    DocumentBuilder builder;
    builder = docFactory.newDocumentBuilder();
    Document doc = builder.parse(CFG_FILE);
    XPathExpression expr = XPathFactory.newInstance().newXPath()
        .compile(XPATH_FOR_PRM_MaxThread);
    Object result = expr.evaluate(doc, XPathConstants.NUMBER);
    if (result instanceof Double) {
      System.out.println(((Double) result).intValue());
    }

  }
}

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <param id="MaxThread" desc="MaxThread"        type="int">250</param>
    <param id="rTmo"      desc="RespTimeout (ms)" type="int">5000</param>
</config>