I need to parse a URL into a nsIDOMHTMLDocument.  Using the code below I was
able to successfully do that, but when I step through the nodes of the
document and try to do a GetValue() on the text nodes I always get a blank
line.

Below is the code I'm using.  If someone can see something obviously wrong
with it please let me know.  I have a standalone program that I can send
anyone who wants to try it.

Thanks for any help,

Bill Phillips




  nsString outString;

  nsCOMPtr<nsIURI> url;
  rv = NS_NewURI(getter_AddRefs(url), inString.ToNewCString());

  nsCOMPtr<nsIInputStream> inputStream;
  rv = NS_OpenURI(getter_AddRefs(inputStream), url);

  NS_WITH_SERVICE(nsIWebShell, webshell, kWebShellCID, &rv);

  NS_WITH_SERVICE(nsIParser, parser, kCParserCID, &rv);

  nsCOMPtr<nsIDocument> doc;
  rv = NS_NewHTMLDocument(getter_AddRefs(doc));

  if (NS_FAILED(rv))
  {
    printf("Unable to create a parser : 0x%x\n", rv);
    return NS_ERROR_FAILURE;
  }

  nsCOMPtr<nsIHTMLContentSink> sink;
  rv = NS_NewHTMLContentSink(getter_AddRefs(sink), doc, url, webshell);
  parser->SetContentSink(sink);

  parser->SetContentSink(sink);
  nsCOMPtr<nsIDTD> dtd = nsnull;
  if (inType.EqualsWithConversion("text/xif"))
    rv = NS_NewXIFDTD(getter_AddRefs(dtd));
  else
    rv = NS_NewNavHTMLDTD(getter_AddRefs(dtd));
  if (NS_FAILED(rv))
  {
    printf("Couldn't create new HTML DTD: 0x%x\n", rv);
    return rv;
  }

  parser->RegisterDTD(dtd);

  rv = parser->Parse(*inputStream, NS_ConvertASCIItoUCS2("text/html"));
  if (NS_FAILED(rv))
  {
    printf("Parse() failed! 0x%x\n", rv);
    return rv;
  }

  nsCOMPtr<nsIDOMHTMLDocument> domdoc;
  rv = doc->QueryInterface(nsIDOMHTMLDocument::GetIID(),
getter_AddRefs(domdoc));
  printf("Parse_URL() - after nsIDOMHTMLDocument QI result = 0x%x\n", rv);

  nsString title;
  domdoc->GetTitle(title);
  printf("Parse_URL() - Document title = %s\n", title.ToNewUTF8String());

  nsCOMPtr<nsIDOMHTMLElement> body;
  rv = domdoc->GetBody(getter_AddRefs(body));
  printf("Parse_URL() - after GetBody rv = 0x%x\n", rv);

  nsCOMPtr<nsIDOMNodeList> nodelist;
  rv = body->GetChildNodes(getter_AddRefs(nodelist));
  printf("Parse_URL() - after GetChildNodes rv = 0x%x\n", rv);

  PRUint32 numnodes;
  nodelist->GetLength(&numnodes);
  printf("Parse_URL() - Number of nodes = %d\n", numnodes);

  nsCOMPtr<nsIDOMNode> node;
  PRUint16 nodetype;
  for(unsigned int i = 0; i < numnodes; i++)
  {
  nodelist->Item(i, getter_AddRefs(node));

  node->GetNodeType(&nodetype);
  printf("Parse_URL() - Node #%d, type is %d\n", i, nodetype);

  if(nodetype == nsIDOMNode::TEXT_NODE)
  {
   nsAutoString nodename;
   node->GetNodeName(nodename);
   printf("    Parse_URL() - Node #%d, name is %s\n", i,
nodename.ToNewCString());

   nsAutoString nodevalue;
   node->GetNodeValue(nodevalue);
   printf("    Parse_URL() - Node #%d, value is %s\n", i,
nodevalue.ToNewCString());
  }
  }




Reply via email to