ParseTagString(aNode.GetText(), &nameSpaceURI, getter_AddRefs(tag));
PRInt32 nameSpaceID;
RDFContentSinkImpl::OpenMember(const nsIParserNode& aNode){    // ensure that we're actually reading a member element by making    // sure that the opening tag is <rdf:li>, where "rdf:" corresponds    // to whatever they've declared the standard RDF namespace to be.    nsresult rv;    const char* nameSpaceURI;    nsCOMPtr<nsIAtom> tag;    ParseTagString(aNode.GetText(), &nameSpaceURI, getter_AddRefs(tag));    if ((0 != PL_strcmp(nameSpaceURI, kRDFNameSpaceURI)) || (tag.get() != kLiAtom)) {        PR_LOG(gLog, PR_LOG_ALWAYS,               ("rdfxml: expected RDF:li at line %d",                aNode.GetSourceLineNumber()));        return NS_ERROR_UNEXPECTED;    }    // The parent element is the container.    nsIRDFResource* container = GetContextElement(0);    if (! container)        return NS_ERROR_NULL_POINTER;    nsIRDFResource* resource;    if (NS_SUCCEEDED(rv = GetResourceAttribute(aNode, &resource))) {        // Okay, this node has an RDF:resource="..." attribute. That        // means that it's a "referenced item," as covered in [6.29].        nsCOMPtr<nsIRDFContainer> c;        NS_NewRDFContainer(getter_AddRefs(c));        c->Init(mDataSource, container);        c->AppendElement(resource);        // XXX Technically, we should _not_ fall through here and push        // the element onto the stack: this is supposed to be a closed        // node. But right now I'm lazy and the code will just Do The        // Right Thing so long as the RDF is well-formed.        NS_RELEASE(resource);    }    // Change state. Pushing a null context element is a bit weird,    // but the idea is that there really is _no_ context "property".    // The contained element will use nsIRDFContainer::AppendElement() to add    // the element to the container, which requires only the container    // and the element to be added.    PushContext(nsnull, mState);    mState = eRDFContentSinkState_InMemberElement;    return NS_OK;}