Here you can find the source of getAncestor(Node node, String ancestorName)
node
has an ancestor with name ancestorName
, return that ancestor.
Parameter | Description |
---|---|
node | node |
ancestorName | ancestorName |
public static Node getAncestor(Node node, String ancestorName)
//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; } }