in src/main/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java [518:560]
public String getNamespaceURI(final String prefix) {
if (prefix == null || prefix.isEmpty()) {
return getDefaultNamespaceURI();
}
if (prefix.equals("xml")) {
return XML_NAMESPACE_URI;
}
if (prefix.equals("xmlns")) {
return XMLNS_NAMESPACE_URI;
}
String namespace = null;
if (namespaces == null) {
namespaces = new HashMap<>();
} else {
namespace = namespaces.get(prefix);
}
if (namespace == null) {
final String qname = "xmlns:" + prefix;
Node aNode = node;
if (aNode instanceof Document) {
aNode = ((Document) aNode).getDocumentElement();
}
while (aNode != null) {
if (aNode.getNodeType() == Node.ELEMENT_NODE) {
final Attr attr = ((Element) aNode).getAttributeNode(qname);
if (attr != null) {
namespace = attr.getValue();
break;
}
}
aNode = aNode.getParentNode();
}
if (namespace == null || namespace.isEmpty()) {
namespace = UNKNOWN_NAMESPACE;
}
}
namespaces.put(prefix, namespace);
if (namespace == UNKNOWN_NAMESPACE) {
return null;
}
// TBD: We are supposed to resolve relative URIs to absolute ones.
return namespace;
}