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();
}