Java XML Child Get by Namespace getChildElementsByTagNameNS(Vector vector, Node node, String tagName, String namespace)

Here you can find the source of getChildElementsByTagNameNS(Vector vector, Node node, String tagName, String namespace)

Description

get Child Elements By Tag Name NS

License

Apache License

Declaration

protected static void getChildElementsByTagNameNS(Vector vector, Node node, String tagName, String namespace) 

Method Source Code

//package com.java2s;
/*//from www  .  j  a  v  a  2 s.co m
 * $Header$
 * $Revision: 207706 $
 * $Date: 2004-08-30 16:08:10 +0800 (Mon, 30 Aug 2004) $
 *
 * ====================================================================
 *
 * Copyright 1999-2002 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 java.util.Vector;

import org.w3c.dom.Element;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Main {
    protected static void getChildElementsByTagNameNS(Vector vector, Node node, String tagName, String namespace) {

        NodeList list = node.getChildNodes();
        for (int i = 0; list != null && i < list.getLength(); i++) {
            try {
                Element element = (Element) list.item(i);

                if (tagName.equals(getElementLocalName(element))
                        && namespace.equals(getElementNamespaceURI(element))) {

                    vector.addElement(element);
                } else {
                    // RECURSIVE!  DANGER, WILL ROBINSON!
                    getChildElementsByTagNameNS(vector, element, tagName, namespace);
                }
            } catch (ClassCastException e) {
            }
        }
    }

    public static String getElementLocalName(Element element) {
        String localName = null;

        if (element == null) {
            throw new IllegalArgumentException("The element cannot be null");
        } else {
            try {
                localName = element.getLocalName();
            } catch (NoSuchMethodError e) {
                localName = element.getTagName();
                int index = localName.indexOf(":");
                if (index > 0 && index < (localName.length() - 1)) {
                    localName = localName.substring(index + 1);
                }
            }
        }
        return localName;
    }

    public static String getElementNamespaceURI(Element element) {
        String namespace = null;

        if (element == null) {
            throw new IllegalArgumentException("The element cannot be null");
        } else {
            try {
                namespace = element.getNamespaceURI();
            } catch (NoSuchMethodError e) {
                String tagName = element.getTagName();
                String attribute = "xmlns";
                int index = tagName.indexOf(":");
                if (index > 0 && index < (tagName.length() - 1)) {
                    attribute += (":" + tagName.substring(0, index));
                }

                boolean found = false;
                for (Node node = element; !found && node != null; node = node.getParentNode()) {
                    try {
                        String tmp = ((Element) node).getAttribute(attribute);
                        if (tmp != null && !tmp.equals("")) {
                            namespace = tmp;
                            found = true;
                        }
                    } catch (ClassCastException f) {
                        // this will happen for Documents
                    }
                }
            }
        }

        return namespace;
    }
}

Related

  1. getChildElementsByTagNameNS(Element parent, String namespaceURI, String localName)
  2. getChildElementsByTagNameNS(Element parentElement, String namespaceURI, String localName)
  3. getChildElementValueNS(Element parentElm, String elementNamespaceURI, String elementLocalName)