com.iggroup.oss.restdoclet.plugin.util.XmlUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.iggroup.oss.restdoclet.plugin.util.XmlUtils.java

Source

/*
 * #%L
 * restdoc-plugin
 * %%
 * Copyright (C) 2012 IG Group
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */
package com.iggroup.oss.restdoclet.plugin.util;

import static org.apache.commons.lang.StringUtils.trimToNull;
import static org.w3c.dom.Node.ELEMENT_NODE;

import java.util.ArrayList;
import java.util.Collection;

import org.apache.commons.lang.StringUtils;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
 * Contains utility-methods for reading XML.
 */
public final class XmlUtils {

    /**
     * No-argument constructor to "silence" PMD.
     */
    private XmlUtils() {
        super();
    }

    /**
     * Returns an attribute of a XML node. Leading and trailing whitespaces are
     * removed in the attribute.
     * 
     * @param node the XML node.
     * @param name the name of the attribute.
     * @return the attribute or <code>null</code> if the attribute is not
     *         present.
     */
    public static String attribute(final Node node, final String name) {
        String value;
        if (node.getAttributes() == null) {
            value = null;
        } else {
            final Node attribute = node.getAttributes().getNamedItem(name);
            if (attribute == null) {
                value = null;
            } else {
                value = trimToNull(attribute.getNodeValue());
            }
        }
        return value;
    }

    /**
     * Returns the <i>first</i> child-element of a XML node with a particular
     * name.
     * 
     * @param node the XML node.
     * @param name the name of the child-element.
     * @return the child-element or <code>null</code> if no child with the name
     *         was found.
     */
    public static Element child(final Node node, final String name) {
        Element element = null;

        for (int i = 0; i < node.getChildNodes().getLength(); i++) {
            if (node.getChildNodes().item(i).getNodeType() == ELEMENT_NODE) {
                final Element child = (Element) node.getChildNodes().item(i);

                if (StringUtils.equals(name, child.getNodeName())) {
                    element = child;
                    break;
                }
            }
        }
        return element;
    }

    /**
     * Returns the child-elements of a XML node with a particular name.
     * 
     * @param node the XML node.
     * @param name the name of the child-elements.
     * @return the collection of child-elements or an empty collection if no
     *         children with the name were found.
     */
    public static Collection<Element> children(final Node node, final String name) {
        final Collection<Element> elements = new ArrayList<Element>();

        for (int i = 0; i < node.getChildNodes().getLength(); i++) {
            if (node.getChildNodes().item(i).getNodeType() == ELEMENT_NODE) {
                final Element child = (Element) node.getChildNodes().item(i);

                if (StringUtils.equals(name, child.getNodeName())) {
                    elements.add(child);
                }
            }
        }
        return elements;
    }

    /**
     * Returns the test-content of a XML node. Leading and trailing whitespaces
     * are removed in the text.
     * 
     * @param node the XML node.
     * @return the text-content or <code>null</code> if the node does not
     *         contain any text.
     */
    public static String textContext(final Node node) {
        String result;
        if (node.getFirstChild() == null) {
            result = null;
        } else {
            result = trimToNull(node.getFirstChild().getNodeValue());
        }
        return result;
    }

}