/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.incubator.xml;
import java.util.List;
import org.dom4j.Node;
import de.rcenvironment.core.utils.common.StringUtils;
import de.rcenvironment.core.utils.incubator.Assertions;
/**
* Utility class that provides methods to retrieve elements and values from XML files.
*
* @author Andre Nurzenski
*/
public final class XMLSupport {
/**
* Constant for a logger or exception message.
*/
private static final String ERROR_PARAMETER_NULL = "The parameter \"%s\" must not be null or empty.";
/**
* Constant for a logger or exception message.
*/
private static final String PARAMETER_ROOT_NODE = "rootNode";
/**
* Constant for a logger or exception message.
*/
private static final String PARAMETER_XPATH_EXPRESSION = "xPathExpression";
/**
*
* Private constructor, because this is a utility class.
*
*/
private XMLSupport() {
}
/**
*
* Retrieves the string representation of a node matching an XPath expression in a dom4j tree.
*
* @param rootNode
* The node containing the subtree to search within.
* @param xPathExpression
* The XPath expression.
* @return the node's value as a string.
*/
public static String getNodeStringValue(Node rootNode, String xPathExpression) {
Assertions.isDefined(rootNode, StringUtils.format(ERROR_PARAMETER_NULL, PARAMETER_ROOT_NODE));
Assertions.isDefined(xPathExpression, StringUtils.format(ERROR_PARAMETER_NULL, PARAMETER_XPATH_EXPRESSION));
// Retrieve a node matching the XPath expression and return its value as a string
// representation if it's not null.
String nodeValue = "";
Node node = rootNode.selectSingleNode(xPathExpression);
if (node != null) {
nodeValue = node.getStringValue();
}
return nodeValue;
}
/**
*
* Retrieves a node matching an XPath expression in a dom4j tree.
*
* @param rootNode
* The node containing the subtree to search within.
* @param xPathExpression
* The XPath expression.
* @return the node described by the XPath expression or <code>null</code> if it does not
* exists.
*/
public static Node selectNode(Node rootNode, String xPathExpression) {
Assertions.isDefined(rootNode, StringUtils.format(ERROR_PARAMETER_NULL, PARAMETER_ROOT_NODE));
Assertions.isDefined(xPathExpression, StringUtils.format(ERROR_PARAMETER_NULL, PARAMETER_XPATH_EXPRESSION));
// Retrieve a node matching the XPath expression and return it.
return rootNode.selectSingleNode(xPathExpression);
}
/**
*
* Retrieves a list of nodes matching an XPath expression in a dom4j tree.
*
* @param rootNode
* The node containing the subtree to search within.
* @param xPathExpression
* The XPath expression.
* @return a list containing the matching nodes or an empty list if the nodes do not exist.
*/
public static List<Node> selectNodes(Node rootNode, String xPathExpression) {
Assertions.isDefined(rootNode, StringUtils.format(ERROR_PARAMETER_NULL, PARAMETER_ROOT_NODE));
Assertions.isDefined(xPathExpression, StringUtils.format(ERROR_PARAMETER_NULL, PARAMETER_XPATH_EXPRESSION));
// Retrieve a list of nodes which match the XPath expression and return it.
return rootNode.selectNodes(xPathExpression);
}
}