XPath in Entitlement Aggregation

Thanks for the responses, everyone, but I gave up on doing it the conventional way and created this after rule instead haha

import java.util.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import java.io.StringReader;
import org.w3c.dom.NodeList;

if (!rawResponseObject.equals("")) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(new InputSource(new StringReader(rawResponseObject)));

    XPathFactory xPathFactory = XPathFactory.newInstance();
    XPath xpath = xPathFactory.newXPath();

    String expression = "/DATA_DS/GL_USER";

    XPathExpression xPathExpression = xpath.compile(expression);

    NodeList entitlements = (NodeList) xPathExpression.evaluate(doc,javax.xml.xpath.XPathConstants.NODESET);

    Map processedResponse = new HashMap();
    String USER_ROLE_XID;
    String IS_RESERVED;
    String GL_LEVEL;
    String USER_ROLE_GID;
    String DATA_SOURCE_PROFILE_GID;
    String VPD_PROFILE_GID;
    String VPD_DOMAIN_NAME;
    String DOMAIN_NAME;
    for (int i = 1; i <= entitlements.getLength(); i++) {

        USER_ROLE_XID = xpath.compile("/DATA_DS/GL_USER["+i+"]/USER_ROLE_XID").evaluate(doc);
        IS_RESERVED = xpath.compile("/DATA_DS/GL_USER["+i+"]/IS_RESERVED").evaluate(doc);
        GL_LEVEL = xpath.compile("/DATA_DS/GL_USER["+i+"]/GL_LEVEL").evaluate(doc);
        USER_ROLE_GID = xpath.compile("/DATA_DS/GL_USER["+i+"]/USER_ROLE_GID").evaluate(doc);
        DATA_SOURCE_PROFILE_GID = xpath.compile("/DATA_DS/GL_USER["+i+"]/DATA_SOURCE_PROFILE_GID").evaluate(doc);
        VPD_PROFILE_GID = xpath.compile("/DATA_DS/GL_USER["+i+"]/VPD_PROFILE_GID").evaluate(doc);
        VPD_DOMAIN_NAME = xpath.compile("/DATA_DS/GL_USER["+i+"]/VPD_DOMAIN_NAME").evaluate(doc);
        DOMAIN_NAME = xpath.compile("/DATA_DS/GL_USER["+i+"]/DOMAIN_NAME").evaluate(doc);


        processedResponse.put("Role", USER_ROLE_XID);
        processedResponse.put("IS_RESERVED", IS_RESERVED);
        processedResponse.put("GL_LEVEL", GL_LEVEL);
        processedResponse.put("USER_ROLE_GID", USER_ROLE_GID);
        processedResponse.put("DATA_SOURCE_PROFILE_GID", DATA_SOURCE_PROFILE_GID);
        processedResponse.put("VPD_PROFILE_GID", VPD_PROFILE_GID);
        processedResponse.put("VPD_DOMAIN_NAME", VPD_DOMAIN_NAME);
        processedResponse.put("DOMAIN_NAME", DOMAIN_NAME);

        processedResponseObject.add(processedResponse);

        processedResponse = new HashMap();
    }
}

Map updatedMapInfo = new HashMap();
updatedMapInfo.put("data", processedResponseObject);

return updatedMapInfo;