Please refer to nsHTMLDocument::StartDocumentLoad or nsXMLDocument::StartDocumentLoad. I think you should create the ContentSink before nsParser is created and call nsParser::SetContentSink. You know, nsParser has a nsIContentSink member. Creating a nsParser instance does not mean the parser automatically has an available nsIContentSink interface.
"Gil Fidel" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Hi, > I'm trying to parse a URL into an nsIDOMHTMLDocument. everything seems > to be going fine, but when I want to go over the resulting DOM > documenting, it turns out that it's empty (or contatins empty nodes) - > when I call routines such as GetTitle() or GetAnchors() they return > NS_OK as their return value, but the data they return is either a > blank string or an empty nsIHTMLCollection. > > Does anyone has any idea what could be wrong with my code? > > Thanks in advance. > > the code: > //---------------------------------------------------------------------------- > void PrintHTMLDOM(nsString * urlName) > { > char * tmpStr = ToNewCString(*urlName); > fprintf(stderr, "Start parsing %s\n", tmpStr); > > nsresult rv; > // Create url > nsIURI* url; > > nsCOMPtr<nsIIOService> service(do_GetService(kIOServiceCID, &rv)); > > if (NS_FAILED(rv)) > { > printf("Failed to create nsIIOService. error = [%x]\n", rv); > return; > } > > nsIURI *uri = nsnull; > NS_ConvertUCS2toUTF8 uriStr(*urlName); > rv = service->NewURI(uriStr, nsnull, nsnull, &uri); > if (NS_FAILED(rv)) > > { > printf("Failed to create URI. error = [%x]\n", rv); > return; > } > > rv = uri->QueryInterface(NS_GET_IID(nsIURI), (void**)&url); > NS_RELEASE(uri); > if (NS_OK != rv) { > printf("invalid URL: '"); > fputs(uriStr.get(), stderr); > printf("'\n"); > return; > } > > //Create input stream > nsCOMPtr<nsIInputStream> inputStream; > rv = NS_OpenURI(getter_AddRefs(inputStream), url); > > //Create webshell > nsCOMPtr<nsIWebShell> webshell(do_GetService(kWebShellCID, &rv)); > > //Create html document > nsCOMPtr<nsIDocument> doc(do_CreateInstance(kHTMLDocumentCID, > &rv)); > if(NS_FAILED(rv)) > > { > fprintf(stderr, "Couldn't create an html document [%x]\n", > rv); > return; > } > > //Create parser > nsCOMPtr<nsIParser> parser; > rv = nsComponentManager::CreateInstance(kCParserCID, > nsnull, > kCParserIID, > (void **)&parser); > if (NS_FAILED(rv)) > { > fprintf(stderr, "Unable to create a parser : 0x%x\n", rv); > return; > } > > //Create htmlcontentsink > nsCOMPtr<nsIHTMLContentSink> sink; > parser->QueryInterface(kIHTMLContentSinkIID, > getter_AddRefs(sink)); > > if(NS_FAILED(rv)) > { > fprintf(stderr, "Unable to create an HTMLContentSink : > 0x%x\n", rv); > return; > } > //rv = NS_NewHTMLContentSink(getter_AddRefs(sink), doc, url, > webshell, nsnull); > parser->SetContentSink(sink); > > rv = parser->Parse(inputStream, NS_LITERAL_CSTRING("text/html") ); > if(NS_FAILED(rv)) > { > fprintf(stderr, "Parsing failed : 0x%x\n", rv); > return; > } > fprintf(stderr, "Finished parsing %s\nStart printing HTML DOM:\n", > tmpStr); > > nsCOMPtr<nsIDOMHTMLDocument> domdoc; > rv = doc->QueryInterface(nsIDOMHTMLDocument::GetIID(), > getter_AddRefs(domdoc)); > > fprintf(stderr, "Parse_URL() - after nsIDOMHTMLDocument QI result > = 0x%x\n", rv); > > nsString title; > nsString URL; > domdoc->GetTitle(title); > domdoc->GetDomain(URL); > fprintf(stderr, "Parse_URL() - Document title = %s\nID = %s\n", > ToNewUTF8String(title), ToNewUTF8String(URL)); > > nsIDOMHTMLCollection * anchors > rv = domdoc->GetAnchors(&anchors); > PRUint32 len; > links->GetLength(&len); > fprintf(stderr, "GetAnchors from DOCUMENHT. anchors count = %d, rv > = 0x%x\n", len, rv); > > nsCOMPtr<nsIDOMHTMLElement> body; > rv = domdoc->GetBody(getter_AddRefs(body)); > printf("Parse_URL() - after GetBody rv = 0x%x\n", rv); _______________________________________________ mozilla-layout mailing list [EMAIL PROTECTED] http://mail.mozilla.org/listinfo/mozilla-layout
