Mega Code Archive

 
Categories / Java Tutorial / XML
 

Starting from a node, find the namespace declaration for a prefix

/**  * Licensed to the Apache Software Foundation (ASF) under one  * or more contributor license agreements. See the NOTICE file  * distributed with this work for additional information  * regarding copyright ownership. The ASF licenses this file  * to you 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 java.util.List; import javax.xml.XMLConstants; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; /**  * Few simple utils to read DOM. This is originally from the Jakarta Commons Modeler.  *   * @author Costin Manolache  */ public class Utils {   private static final String XMLNAMESPACE = "xmlns";   /**    * Starting from a node, find the namespace declaration for a prefix. for a matching namespace    * declaration.    *     * @param node search up from here to search for namespace definitions    * @param searchPrefix the prefix we are searching for    * @return the namespace if found.    */   public static String getNamespace(Node node, String searchPrefix) {       Element el;       while (!(node instanceof Element)) {           node = node.getParentNode();       }       el = (Element)node;       NamedNodeMap atts = el.getAttributes();       for (int i = 0; i < atts.getLength(); i++) {           Node currentAttribute = atts.item(i);           String currentLocalName = currentAttribute.getLocalName();           String currentPrefix = currentAttribute.getPrefix();           if (searchPrefix.equals(currentLocalName) && XMLNAMESPACE.equals(currentPrefix)) {               return currentAttribute.getNodeValue();           } else if (isEmpty(searchPrefix) && XMLNAMESPACE.equals(currentLocalName)                      && isEmpty(currentPrefix)) {               return currentAttribute.getNodeValue();           }       }       Node parent = el.getParentNode();       if (parent instanceof Element) {           return getNamespace((Element)parent, searchPrefix);       }       return null;   }   public static boolean isEmpty(String str) {     return str == null || str.length() == 0; }