/** * <p> * Creates a QName instance from the given namespace context for the given qualifiedName. * </p> * * @param element the element to use as the namespace context. * @param qualifiedName the fully qualified name. * @return the QName which matches the qualifiedName. */ public static QName createQName(Element element, String qualifiedName) { int index = qualifiedName.indexOf(':'); if (index >= 0) { String prefix = qualifiedName.substring(0, index); String localName = qualifiedName.substring(index + 1); String uri = recursiveGetAttributeValue(element, "xmlns:" + prefix); return new QName(uri, localName, prefix); } else { String uri = recursiveGetAttributeValue(element, "xmlns"); if (uri != null) { return new QName(uri, qualifiedName); } return new QName(qualifiedName); } }
/** * <p> * Recursive method to find a given attribute value. * </p> * * @param element the element where to looking for attribute. * @param attributeName the attribute name to look for. * @return the value of the given attribute. */ public static String recursiveGetAttributeValue(Element element, String attributeName) { String answer = null; try { answer = element.getAttribute(attributeName); } catch (Exception e) { if (logger.isTraceEnabled()) { logger.trace("Caught exception looking up attribute: " + attributeName + " on element: " + element + ". Cause: " + e, e); } } if (answer == null || answer.length() == 0) { Node parentNode = element.getParentNode(); if (parentNode instanceof Element) { return recursiveGetAttributeValue((Element) parentNode, attributeName); } } return answer; }