public Iterator getNamespaceAxisIterator()

in axiom-api/src/main/java/org/apache/axiom/om/xpath/DocumentNavigator.java [369:412]


    public Iterator<?> getNamespaceAxisIterator(Object contextNode) throws UnsupportedAxisException {
        if (!(contextNode instanceof OMContainer &&
                contextNode instanceof OMElement)) {
            return JaxenConstants.EMPTY_ITERATOR;
        }
        OMContainer omContextNode = (OMContainer) contextNode;
        List<OMNamespaceEx> nsList = new ArrayList<OMNamespaceEx>();
        Set<String> prefixes = new HashSet<String>();
        for (OMContainer context = omContextNode;
             context != null && !(context instanceof OMDocument);
             context = ((OMElement) context).getParent()) {
            OMElement element = (OMElement) context;
            List<OMNamespace> declaredNS = new ArrayList<OMNamespace>();
            Iterator<OMNamespace> i = element.getAllDeclaredNamespaces();
            while (i != null && i.hasNext()) {
                declaredNS.add(i.next());
            }
            declaredNS.add(element.getNamespace());
            for (Iterator<OMAttribute> iter = element.getAllAttributes();
                 iter != null && iter.hasNext();) {
                OMAttribute attr = iter.next();
                OMNamespace namespace = attr.getNamespace();
                if (namespace != null) {
                    declaredNS.add(namespace);
                }
            }
            for (OMNamespace namespace : declaredNS) {
                if (namespace != null) {
                    String prefix = namespace.getPrefix();
                    if (prefix != null && !prefixes.contains(prefix)) {
                        prefixes.add(prefix);
                        nsList.add(new OMNamespaceEx(namespace, context));
                    }
                }
            }
        }
        nsList.add(
                new OMNamespaceEx(
                        omContextNode.getOMFactory().createOMNamespace(
                                "http://www.w3.org/XML/1998/namespace",
                                "xml"),
                        omContextNode));
        return nsList.iterator();
    }