Here you can find the source of getFirstNodeFromPath(Node contextNode, final String[] path, final boolean create)
Parameter | Description |
---|---|
contextNode | The node starting the search. |
path | The path to search the node. The contextNode is searched for a child named path[0], this node is searched for a child named path[1]... |
create | If a child with the corresponding name is not found and create is set, this node will be created. |
public static Node getFirstNodeFromPath(Node contextNode, final String[] path, final boolean create)
//package com.java2s; /*/* w w w . ja v a2 s .co m*/ * Copyright 1999-2005 The Apache Software Foundation. * * 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. */ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Main { /** * Use a path to select the first occurence of a node. The namespace * of a node is ignored! * @param contextNode The node starting the search. * @param path The path to search the node. The * contextNode is searched for a child named path[0], * this node is searched for a child named path[1]... * @param create If a child with the corresponding name is not found * and create is set, this node will be created. */ public static Node getFirstNodeFromPath(Node contextNode, final String[] path, final boolean create) { if (contextNode == null || path == null || path.length == 0) return contextNode; // first test if the node exists Node item = getFirstNodeFromPath(contextNode, path, 0); if (item == null && create == true) { int i = 0; NodeList childs; boolean found; int m, l; while (contextNode != null && i < path.length) { childs = contextNode.getChildNodes(); found = false; if (childs != null) { m = 0; l = childs.getLength(); while (found == false && m < l) { item = childs.item(m); if (item.getNodeType() == Node.ELEMENT_NODE && item.getLocalName().equals(path[i]) == true) { found = true; contextNode = item; } m++; } } if (found == false) { Element e = contextNode.getOwnerDocument().createElementNS(null, path[i]); contextNode.appendChild(e); contextNode = e; } i++; } item = contextNode; } return item; } /** * Private helper method for getFirstNodeFromPath() */ private static Node getFirstNodeFromPath(final Node contextNode, final String[] path, final int startIndex) { int i = 0; NodeList childs; boolean found; int l; Node item = null; childs = contextNode.getChildNodes(); found = false; if (childs != null) { i = 0; l = childs.getLength(); while (found == false && i < l) { item = childs.item(i); if (item.getNodeType() == Node.ELEMENT_NODE && path[startIndex] .equals(item.getLocalName() != null ? item.getLocalName() : item.getNodeName()) == true) { if (startIndex == path.length - 1) { found = true; } else { item = getFirstNodeFromPath(item, path, startIndex + 1); if (item != null) found = true; } } if (found == false) { i++; } } if (found == false) { item = null; } } return item; } /** * Get the owner of the DOM document belonging to the node. * This works even if the node is the document itself. * * @param node The node. * @return The corresponding document. */ public static Document getOwnerDocument(Node node) { if (node.getNodeType() == Node.DOCUMENT_NODE) { return (Document) node; } else { return node.getOwnerDocument(); } } }