@Nullable
    public QName getQName(@NotNull PrefixedName qName, XPathElement context) {
        final String prefix = qName.getPrefix();
        final NamespaceContext namespaceContext = getNamespaceContext();
        if (namespaceContext != null) {
            if (prefix != null) {
                final XmlElement element = PsiTreeUtil.getContextOfType(context, XmlElement.class, true);
                final String namespaceURI = namespaceContext.getNamespaceURI(prefix, element);
                return namespaceURI != null && namespaceURI.length() > 0 ? new QName(namespaceURI, qName.getLocalName(), prefix) : null;
            } else if (context.getXPathVersion() == XPathVersion.V2){
              if (isDefaultCapableElement(context)) {
                final String namespace = namespaceContext.getDefaultNamespace(getContextElement());
                if (namespace != null) {
                  return new QName(namespace, qName.getLocalName());
                }
              }
            }
            return new QName(null, qName.getLocalName(), "");
        } else if (qName.getPrefix() == null) {
            return QName.valueOf(qName.getLocalName());
        } else {
            return null;
        }
    }
@Nullable
    public QName getQName(@NotNull PrefixedName qName, XPathElement context)