问下各位大牛,我用socket获取了一个网页的网页流,我需要使用mshtml和msxml去解析,请问下,如何才能把这个流文件加载进去。

解决方案 »

  1.   

    你把网页流村到一个CString中看看实不实html代码
    如果是的话已CMarkup为例通过SetDoc方法即可加载数据
      

  2.   

    肯定是html代码的,能给个例子不?
      

  3.   

    以前帮朋友写的分析福彩3D的一个程序中过去网页中往期数据的代码
    你参考一下吧
    void CMy3DAnalyzerDlg::OnClickButtonDel()
    {
    if(!UpdateData())
    return; //int nIndex = m_listRefCode.GetCurSel(); //if(nIndex<0)
    //{
    // AfxMessageBox("请在列表中选择一个号码");
    // return;
    //} //m_listRefCode.DeleteString(nIndex); //获取数据
    char buff[DOWNLOAD_SPEED];
    CString strXMLPath, strQueryInfo, strUrl; int nItemCount = 0;
    m_listCode.DeleteAllItems();
    for(int i=1; i<58; i++)
    {
    //设置连接工具http://www.16788.cn/3d/lishi.asp?sort=天天彩选3&sortid=5&page=1
    strUrl.Format("http://www.cy198.com/new3d/3d.asp?page=%d&typeid=", i);
    SetConnectTool(strUrl, strXMLPath); CHttpFile* pHttpFile = m_pHttpConnect->OpenRequest(CHttpConnection::HTTP_VERB_GET, strXMLPath, NULL, 1, NULL, NULL, m_dwHttpRequestFlags);
    try
    {
    if(pHttpFile==NULL||!pHttpFile->SendRequest())
    {
    pHttpFile->Close();
    delete pHttpFile;
    return;
    }
    }catch(...)
    {
    AfxMessageBox("网络连接异常!");
    delete pHttpFile;
    return;
    } pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, strQueryInfo);
    DWORD dwLen=atol(strQueryInfo);
    //从服务器读取文件
    int nCount, nRead = 0;
    //下载文件
    while((nCount=pHttpFile->Read(buff, DOWNLOAD_SPEED))>0)
    {
    nRead += nCount;
    m_strWebContent += buff;
    m_strWebContent  = m_strWebContent.Left(nRead);
    } pHttpFile->Close();
    delete pHttpFile; CMarkup xmlData;
    int nStart = atoi(m_strRefCode);
    int nEnd = atoi(m_strRefEnd); xmlData.SetDoc(m_strWebContent);
    xmlData.ResetMainPos();
    if(xmlData.FindElem("HTML"))
    {
    xmlData.IntoElem();
    if(xmlData.FindElem("BODY"))
    {
    xmlData.IntoElem();
    xmlData.FindElem("table");
    if(xmlData.FindElem("table"))
    {
    xmlData.IntoElem();
    xmlData.FindElem("tr");
    if(xmlData.FindElem("tr"))
    {
    xmlData.IntoElem();
    xmlData.FindElem("td");
    if(xmlData.FindElem("td"))
    {
    xmlData.IntoElem();
    if(xmlData.FindElem("div"))
    {
    xmlData.IntoElem();
    if(xmlData.FindElem("center"))
    {
    xmlData.IntoElem();
    if(xmlData.FindElem("table"))
    {
    xmlData.IntoElem();
    xmlData.FindElem("tr");
    while(xmlData.FindElem("tr"))
    {
    if(xmlData.FindChildElem("td"))
    m_listCode.InsertItem(nItemCount, xmlData.GetChildData());
    if(xmlData.FindChildElem("td"))
    m_listCode.SetItemText(nItemCount, 1, xmlData.GetChildData());
    nItemCount++;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
      

  4.   

    哦,不错。
    CMARKUP是一个分析XML的收费parser。不知道这个东东对于HTML内容的解析如何?TinyXML可以达到目的么?
    比如html页面内有一个img,是不是可以把这个img给保存下来啊?我对HTML浏览解析这块毫无经验。
      

  5.   

    我上面代码解析的不就是HTML么
      

  6.   

    明白,多谢。不过我目前用的解析器是TinyXML,不是CMARKUP解析器啊。我不太熟悉针对HTML解析的使用,再学习研究。
    在这个帖子多多研究,xianglitian你是不是也在做这块的东东?呵呵。一起研究研究吧?