Returns an iterator over the children of the given element with the given tag name : Iterator « Collections « Java Tutorial






import java.util.ArrayList;
import java.util.Iterator;

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

/**
 * A utility class to cover up the rough bits of xml parsing
 * 
 * @author <a href="mailto:chris@kimptoc.net">Chris Kimpton</a>
 * @version $Revision: 2787 $
 */
@SuppressWarnings("unchecked")
public class XmlHelper {

  /**
   * Returns an iterator over the children of the given element with the given
   * tag name.
   * 
   * @param element
   *          The parent element
   * @param tagName
   *          The name of the desired child
   * @return An interator of children or null if element is null.
   */
  public static Iterator getChildrenByTagName(Element element, String tagName) {
    if (element == null)
      return null;
    // getElementsByTagName gives the corresponding elements in the whole
    // descendance. We want only children

    NodeList children = element.getChildNodes();
    ArrayList goodChildren = new ArrayList();
    for (int i = 0; i < children.getLength(); i++) {
      Node currentChild = children.item(i);
      if (currentChild.getNodeType() == Node.ELEMENT_NODE
          && ((Element) currentChild).getTagName().equals(tagName)) {
        goodChildren.add(currentChild);
      }
    }
    return goodChildren.iterator();
  }

  /**
   * Gets the child of the specified element having the specified unique name.
   * If there are more than one children elements with the same name and
   * exception is thrown.
   * 
   * @param element
   *          The parent element
   * @param tagName
   *          The name of the desired child
   * @return The named child.
   * 
   * @throws Exception
   *           Child was not found or was not unique.
   */
  public static Element getUniqueChild(Element element, String tagName) throws Exception {
    Iterator goodChildren = getChildrenByTagName(element, tagName);

    if (goodChildren != null && goodChildren.hasNext()) {
      Element child = (Element) goodChildren.next();
      if (goodChildren.hasNext()) {
        throw new Exception("expected only one " + tagName + " tag");
      }
      return child;
    } else {
      throw new Exception("expected one " + tagName + " tag");
    }
  }

  /**
   * Gets the child of the specified element having the specified name. If the
   * child with this name doesn't exist then null is returned instead.
   * 
   * @param element
   *          the parent element
   * @param tagName
   *          the name of the desired child
   * @return either the named child or null
   * @throws Exception
   */
  public static Element getOptionalChild(Element element, String tagName) throws Exception {
    return getOptionalChild(element, tagName, null);
  }

  /**
   * Gets the child of the specified element having the specified name. If the
   * child with this name doesn't exist then the supplied default element is
   * returned instead.
   * 
   * @param element
   *          the parent element
   * @param tagName
   *          the name of the desired child
   * @param defaultElement
   *          the element to return if the child doesn't exist
   * @return either the named child or the supplied default
   * @throws Exception
   */
  public static Element getOptionalChild(Element element, String tagName, Element defaultElement)
      throws Exception {
    Iterator goodChildren = getChildrenByTagName(element, tagName);

    if (goodChildren != null && goodChildren.hasNext()) {
      Element child = (Element) goodChildren.next();
      if (goodChildren.hasNext()) {
        throw new Exception("expected only one " + tagName + " tag");
      }
      return child;
    } else {
      return defaultElement;
    }
  }

  /**
   * Get the content of the given element.
   * 
   * @param element
   *          The element to get the content for.
   * @return The content of the element or null.
   * @throws Exception
   */
  public static String getElementContent(final Element element) throws Exception {
    return getElementContent(element, null);
  }

  /**
   * Get the content of the given element.
   * 
   * @param element
   *          The element to get the content for.
   * @param defaultStr
   *          The default to return when there is no content.
   * @return The content of the element or the default.
   * @throws Exception
   */
  public static String getElementContent(Element element, String defaultStr) throws Exception {
    if (element == null)
      return defaultStr;

    NodeList children = element.getChildNodes();
    String result = "";
    for (int i = 0; i < children.getLength(); i++) {
      if (children.item(i).getNodeType() == Node.TEXT_NODE
          || children.item(i).getNodeType() == Node.CDATA_SECTION_NODE) {
        result += children.item(i).getNodeValue();
      } else if (children.item(i).getNodeType() == Node.COMMENT_NODE) {
        // Ignore comment nodes
      }
    }
    return result.trim();
  }

  /**
   * Macro to get the content of a unique child element.
   * 
   * @param element
   *          The parent element.
   * @param tagName
   *          The name of the desired child.
   * @return The element content or null.
   * @throws Exception
   */
  public static String getUniqueChildContent(Element element, String tagName) throws Exception {
    return getElementContent(getUniqueChild(element, tagName));
  }

  /**
   * Macro to get the content of an optional child element.
   * 
   * @param element
   *          The parent element.
   * @param tagName
   *          The name of the desired child.
   * @return The element content or null.
   * @throws Exception
   */
  public static String getOptionalChildContent(Element element, String tagName) throws Exception {
    return getElementContent(getOptionalChild(element, tagName));
  }

  public static boolean getOptionalChildBooleanContent(Element element, String name)
      throws Exception {
    Element child = getOptionalChild(element, name);
    if (child != null) {
      String value = getElementContent(child).toLowerCase();
      return value.equals("true") || value.equals("yes");
    }

    return false;
  }

}








9.37.Iterator
9.37.1.Use Iterator to loop through ArrayList
9.37.2.Use Iterator to loop through the HashMap class
9.37.3.Iterate through a Collection using Java Iterator
9.37.4.Traverse through ArrayList in forward direction using Java ListIterator
9.37.5.Traverse through ArrayList in reverse direction using Java ListIterator
9.37.6.Iterate a Collection and remove an item (Exception, wrong version)
9.37.7.Remove an element from Collection using Java Iterator
9.37.8.Iterator from LinkedList
9.37.9.Iterate through elements of Java LinkedList using Iterator
9.37.10.An Iterator that wraps a number of Iterators
9.37.11.Array Iterator
9.37.12.Create singleton Iterator
9.37.13.Cyclic Iteration
9.37.14.Iterator Union of Iterators
9.37.15.Iterator Utils
9.37.16.Iterator class for sparse values in an array.
9.37.17.Iterator class for values contained in an array range.
9.37.18.Sorted Iterator
9.37.19.Treat an Iterator as an Iterable
9.37.20.An Iterator that returns the elements of a specified array, or other iterators etc.
9.37.21.An Iterator wrapper for an Enumeration.
9.37.22.An Iterator wrapper for an Object[], allow us to deal with all array like structures in a consistent manner.
9.37.23.An iterator that breaks text into lines. The result is equal to BufferedReader.readLine().
9.37.24.Gets the child of the specified element having the specified unique name
9.37.25.Implements an java.util.Iterator over any array
9.37.26.Protects an given iterator by preventing calls to remove().
9.37.27.Returns an iterator over the children of the given element with the given tag name
9.37.28.Use an Iterator to cycle through a collection in the forward direction.
9.37.29.This constructs an Iterator over each day in a date range defined by a focus date and range style.