Extracting child nodes data from given node

Michael A picture Michael A · Jan 13, 2012 · Viewed 14.3k times · Source

I want to use DOM4j for parsing xml file in Java.

I have this XML as an example:

<request method="POST" url="/devices/test/planner" body="*">
  <response statusCode="200">
    <header>
      <headerParameters>
        <headerParameter name="Content-Type">
          Content-Type=application/xml
        </headerParameter>
      </headerParameters>
    </header>
    <body>booking created!</body>
  </response>
</request>

Given the request (first node) node, how can I extract the child nodes data?

For example getting the <response> status code, or the <headerParameter> name attributes?

Answer

maerics picture maerics · Jan 13, 2012

Assuming you get the "request" node as an Element then you can do something like this:

Element response = (Element) request.elements().get(0);
int statusCode = Integer.parseInt(response.attribute("statusCode"));

If you want to traverse the children recursively then you'll have to write iterative (or recursive) code to visit each element in the list returned by the elements() method.

[Edit] You can also use XPath to extract the specific items you're looking for:

int statusCode = Integer.parseInt(
    request.selectSingleNode("response/@statusCode").getText());
String firstHeaderName =
    request.selectSingleNode(
        "response/headerParameters/headerParameter/@name").getText();