nsRDFParserUtils::StripAndConvert(uri);
XULContentSinkImpl::PushNameSpacesFrom(const nsIParserNode& aNode){    nsINameSpace* nameSpace = nsnull;    if (0 < mNameSpaceStack.Count()) {        nameSpace = (nsINameSpace*)mNameSpaceStack[mNameSpaceStack.Count() - 1];        NS_ADDREF(nameSpace);    }    else {        gNameSpaceManager->CreateRootNameSpace(nameSpace);    }    NS_ASSERTION(nameSpace != nsnull, "no parent namespace");    if (! nameSpace)        return;    PRInt32 ac = aNode.GetAttributeCount();    for (PRInt32 i = 0; i < ac; i++) {        nsAutoString k(aNode.GetKeyAt(i));        // Look for "xmlns" at the start of the attribute name        PRInt32 offset = k.Find(kNameSpaceDef);        if (0 != offset)            continue;        nsAutoString prefix;        if (k.Length() >= PRInt32(sizeof kNameSpaceDef)) {            // If the next character is a :, there is a namespace prefix            PRUnichar next = k.CharAt(sizeof(kNameSpaceDef)-1);            if (':' == next) {                k.Right(prefix, k.Length()-sizeof(kNameSpaceDef));            }            else {                continue; // it's not "xmlns:"            }        }        // Get the attribute value (the URI for the namespace)        nsAutoString uri(aNode.GetValueAt(i));        nsRDFParserUtils::StripAndConvert(uri);        // Open a local namespace        nsIAtom* prefixAtom = ((0 < prefix.Length()) ? NS_NewAtom(prefix) : nsnull);        nsINameSpace* child = nsnull;        nameSpace->CreateChildNameSpace(prefixAtom, uri, child);        if (nsnull != child) {            NS_RELEASE(nameSpace);            nameSpace = child;        }        NS_IF_RELEASE(prefixAtom);    }    // Now push the *last* namespace that we discovered on to the stack.    mNameSpaceStack.AppendElement(nameSpace);}