import javax.xml.namespace.QName;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class Utils {
/**
* Creates a QName instance from the given namespace context for the given qualifiedName
*
* @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);
}
}
/**
* Recursive method to find a given attribute value
*/
public static String recursiveGetAttributeValue(Element element, String attributeName) {
String answer = null;
try {
answer = element.getAttribute(attributeName);
} catch (Exception e) {
}
if (answer == null || answer.length() == 0) {
Node parentNode = element.getParentNode();
if (parentNode instanceof Element) {
return recursiveGetAttributeValue((Element) parentNode, attributeName);
}
}
return answer;
}
}