Gets the child of the specified element having the specified unique name : DOM Tree « XML « Java

Home
Java
1.2D Graphics GUI
2.3D
3.Advanced Graphics
4.Ant
5.Apache Common
6.Chart
7.Class
8.Collections Data Structure
9.Data Type
10.Database SQL JDBC
11.Design Pattern
12.Development Class
13.EJB3
14.Email
15.Event
16.File Input Output
17.Game
18.Generics
19.GWT
20.Hibernate
21.I18N
22.J2EE
23.J2ME
24.JDK 6
25.JNDI LDAP
26.JPA
27.JSP
28.JSTL
29.Language Basics
30.Network Protocol
31.PDF RTF
32.Reflection
33.Regular Expressions
34.Scripting
35.Security
36.Servlets
37.Spring
38.Swing Components
39.Swing JFC
40.SWT JFace Eclipse
41.Threads
42.Tiny Application
43.Velocity
44.Web Services SOA
45.XML
Java » XML » DOM TreeScreenshots 
Gets the child of the specified element having the specified unique name
   

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
          && ((ElementcurrentChild).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 tagNamethrows Exception {
    Iterator goodChildren = getChildrenByTagName(element, tagName);

    if (goodChildren != null && goodChildren.hasNext()) {
      Element child = (ElementgoodChildren.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 tagNamethrows 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 = (ElementgoodChildren.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 elementthrows 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 defaultStrthrows 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 tagNamethrows 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 tagNamethrows 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;
  }

}

   
    
    
  
Related examples in the same category
1.Creating a new DOM tree
2.Create new DOM tree with fully qualified element names
3.Traverse the DOM tree as a list
4.Traverse the DOM tree using TreeWalker
5.Reading a DOM tree from XML document
6.Copying a Subtree of Nodes in a DOM Document
7.Copying a Subtree of Nodes from One DOM Document to Another
8.Saving a DOM tree to XML file javax.xml.parsers (JAXP)
9.Using ranges in DOM tree
10.Accessing different types of DOM tree nodes
11.Manipulate w3c DOM trees
12.Returns an iterator over the children of the given element with the given tag name
13.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.
14.Traverse a DOM tree in order to get information about the document.
15.Get this Document's root node
16.Returns the concatenated child text of the specified node.
17.Get the first child of the specified type.
18.Get the first child's content ( ie it's included TEXT node ).
19.Get the first direct child with a given type
20.Print Tree node
21.DOM Util: get Child Text
22.Search earlier siblings for a given node
23.Search for a named child of a given node
24.Search our next siblings for a given node
25.Search up the tree for a given node
26.Return the next sibling with a given name and type
27.Get Child Content
28.Traverse a DOM tree in order to print a document that is parsed.
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.