Java XML Node Previous getAncestor(Node node, String ancestorName)

Here you can find the source of getAncestor(Node node, String ancestorName)

Description

If node has an ancestor with name ancestorName, return that ancestor.

License

Open Source License

Parameter

Parameter Description
node node
ancestorName ancestorName

Return

p if p.getNodeName equals ancestorName

Declaration

public static Node getAncestor(Node node, String ancestorName) 

Method Source Code

//package com.java2s;
/**//from   www. ja v a 2  s  . com
 * Copyright 2000-2006 DFKI GmbH.
 * All Rights Reserved.  Use is subject to license terms.
 *
 * This file is part of MARY TTS.
 *
 * MARY TTS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

import org.w3c.dom.Node;

public class Main {
    /**
     * If <code>node</code> has an ancestor with name <code>ancestorName</code>, return that ancestor. Else return
     * <code>null</code>.
     * 
     * @param node
     *            node
     * @param ancestorName
     *            ancestorName
     * @return p if p.getNodeName equals ancestorName
     */
    public static Node getAncestor(Node node, String ancestorName) {
        Node p = node;
        while ((p = p.getParentNode()) != null) {
            if (p.getNodeName().equals(ancestorName))
                return p;
        }
        return null;
    }

    /**
     * If <code>node</code> has an ancestor with one of the names in <code>ancestorNames</code>, return the closest of these
     * ancestors. Else return <code>null</code>.
     * 
     * @param node
     *            node
     * @param ancestorNames
     *            ancestorNames
     * @return closestAncestor
     */
    public static Node getAncestor(Node node, String[] ancestorNames) {
        if (ancestorNames.length <= 0)
            throw new IllegalArgumentException("No ancestorNames provided.");
        Node closestAncestor = null;
        for (int i = 0; i < ancestorNames.length; i++) {
            Node ancestor = getAncestor(node, ancestorNames[i]);
            if (ancestor != null) {
                if (closestAncestor == null) {
                    closestAncestor = ancestor;
                } else if (isAncestor(closestAncestor, ancestor)) { // new one is closer than closest so far
                    closestAncestor = ancestor;
                } // else leave as is
            }
        }
        return closestAncestor;
    }

    /**
     * Verify if <code>ancestor</code> is an ancestor of <code>node</code>
     * 
     * @param ancestor
     *            ancestor
     * @param node
     *            node
     * @return true if ancestor equals to p, false otherwise
     */
    public static boolean isAncestor(Node ancestor, Node node) {
        Node p = node;
        while ((p = p.getParentNode()) != null) {
            if (ancestor == p)
                return true;
        }
        return false;
    }
}

Related

  1. countElementsBefore(Node node, String tagName)
  2. countElementsBefore(Node node, String tagName)
  3. getAncesters(Node node)
  4. getAncestorNode(Node visualNode, String tagName)
  5. getAncestors(Node node)
  6. getPrevious(final Node current, final boolean sameName)
  7. getPrevious(Node node)