XmlUtil.java Source code

Java tutorial

Introduction

Here is the source code for XmlUtil.java

Source

// Copyright (c) 2003-2009, Jodd Team (jodd.org). All Rights Reserved.

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Some XML and XPath utilities.
 */
public class XmlUtil {

    // ---------------------------------------------------------------- attributes

    /**
     * Returns a map of all node's attributes. All non-attribute nodes are ignored.
     */
    public static Map<String, String> getAllAttributes(Node node) {
        HashMap<String, String> attrs = new HashMap<String, String>();
        NamedNodeMap nmm = node.getAttributes();
        for (int j = 0; j < nmm.getLength(); j++) {
            Node attribute = nmm.item(j);
            if (attribute.getNodeType() != Node.ATTRIBUTE_NODE) {
                continue;
            }
            attrs.put(attribute.getNodeName(), attribute.getNodeValue());
        }
        return attrs;
    }

    /**
    * Returns attribute value of a node or <code>null</code> if attribute name not found.
    * Specified attribute is searched on every call.
    * Consider {@link #getAllAttributes(org.w3c.dom.Node)} for better performances.
    */
    public static String getAttributeValue(Node node, String attrName) {
        NamedNodeMap nmm = node.getAttributes();
        for (int j = 0; j < nmm.getLength(); j++) {
            Node attribute = nmm.item(j);
            if (attribute.getNodeType() != Node.ATTRIBUTE_NODE) {
                continue;
            }
            String nodeName = attribute.getNodeName();
            if (nodeName.equals(attrName)) {
                return attribute.getNodeValue();
            }
        }
        return null;
    }

    /**
     * Get element's attribute value or <code>null</code> if attribute not found or empty.
     */
    public static String getAttributeValue(Element element, String name) {
        String value = element.getAttribute(name);
        if (value.length() == 0) {
            value = null;
        }
        return value;
    }

    // ---------------------------------------------------------------- nodelist

    /**
     * Filters node list by keeping nodes of specified type.
     */
    public static List filterNodeList(NodeList nodeList, short keepNodeType) {
        return filterNodeList(nodeList, keepNodeType, null);
    }

    /**
     * Filters node list by keeping nodes of specified type and node name.
     */
    public static List<Node> filterNodeList(NodeList nodeList, short keepNodeType, String nodeName) {
        List<Node> nodes = new ArrayList<Node>();
        for (int k = 0; k < nodeList.getLength(); k++) {
            Node node = nodeList.item(k);
            if (node.getNodeType() != keepNodeType) {
                continue;
            }
            if (nodeName != null && (node.getNodeName().equals(nodeName) == false)) {
                continue;
            }
            nodes.add(node);
        }
        return nodes;
    }

    /**
     * Filter node list for all Element nodes.
     */
    public static List filterNodeListElements(NodeList nodeList) {
        return filterNodeListElements(nodeList, null);
    }

    /**
     * Filter node list for Element nodes of specified name.
     */
    public static List<Node> filterNodeListElements(NodeList nodeList, String nodeName) {
        List<Node> nodes = new ArrayList<Node>();
        for (int k = 0; k < nodeList.getLength(); k++) {
            Node node = nodeList.item(k);
            if (node.getNodeType() != Node.ELEMENT_NODE) {
                continue;
            }
            if (nodeName != null && (node.getNodeName().equals(nodeName) == false)) {
                continue;
            }
            nodes.add(node);
        }
        return nodes;
    }

    /**
     * Returns a list of all child Elements,
     */
    public static List getChildElements(Node node) {
        return getChildElements(node, null);
    }

    /**
     * Returns a list of child Elements of specified name.
     */
    public static List getChildElements(Node node, String nodeName) {
        NodeList childs = node.getChildNodes();
        return filterNodeListElements(childs, nodeName);
    }

    // ---------------------------------------------------------------- node

    /**
     * Returns value of first available child text node or <code>null</code> if not found.
     */
    public static String getFirstChildTextNodeValue(Node node) {
        NodeList children = node.getChildNodes();
        int len = children.getLength();
        for (int i = 0; i < len; i++) {
            Node n = children.item(i);
            if (n.getNodeType() == Node.TEXT_NODE) {
                return n.getNodeValue();
            }
        }
        return null;
    }

    /**
     * Returns value of single child text node or <code>null</code>.
     */
    public static String getChildTextNodeValue(Node node) {
        if (node.getChildNodes().getLength() != 1) {
            return null;
        }
        Node item0 = node.getChildNodes().item(0);
        if (item0.getNodeType() != Node.TEXT_NODE) {
            return null;
        }
        return item0.getNodeValue();
    }

}