大家好
我想解析一份本地的HTML 文件  截取他的 URL 链接
实现效果: (和 在IE 中 右击  点 用**下载全部链接 相同)  得到链接名 和链接我用的是VC
我不想在上面增加一个 CHtmlView ,把它打开, 再解析 。
我只是想把它 以文件的形式 打开、 读取 再直接解析。
谢谢大家~

解决方案 »

  1.   

    HANDLE hFile = CreateFile("D:\\XDrv\\LocalData\\Info\\公司股本结构.htm", GENERIC_READ, 
    FILE_SHARE_READ | FILE_SHARE_WRITE, 
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
    NULL);

    if (INVALID_HANDLE_VALUE == hFile)
    {
    //return HRESULT_FROM_WIN32(GetLastError());
    return ;
    } HRESULT hResult = E_FAIL; DWORD dwRead = 0;
    DWORD dwFileSize = GetFileSize(hFile, NULL); // No HiOrder DWORD required
    char* pszHtmlText = (char*)_alloca(dwFileSize + 1);
    if (ReadFile(hFile, pszHtmlText, dwFileSize, &dwRead, NULL) == 0)
    {
    //ATLTRACE2(atlTraceRegistrar, 0, "Read Failed on file%s\n", OLE2CT(bstrFileName));
    hResult =  HRESULT_FROM_WIN32(GetLastError());
    } CloseHandle(hFile);

    CComBSTR bstrHtmlText = pszHtmlText;
    //
    // if (SUCCEEDED(hResult))
    {
    // pszHtmlText[dwRead] = NULL;
    // LPTSTR szConverted = A2T(pszHtmlText);
    // ATLTRACE(szConverted);


    }
    //
    //////////////////////////////////////////////////////////////////////////
    IHTMLDocument2 *pDoc = NULL;
    CoCreateInstance(CLSID_HTMLDocument, 
       NULL, 
       CLSCTX_INPROC_SERVER, 
       IID_IHTMLDocument2, 
       (LPVOID *) &pDoc); if (pDoc)
    {
    IPersistStreamInit *pPersist = NULL;
    pDoc->QueryInterface(IID_IPersistStreamInit, 
       (LPVOID *) &pPersist);
    if (pPersist)
    {
      IMarkupServices *pMS = NULL;
      
      pPersist->InitNew();
      pPersist->Release();   pDoc->QueryInterface(IID_IMarkupServices, 
      (LPVOID *) &pMS);
      if (pMS)
      {
    IMarkupContainer *pMC = NULL;
    IMarkupPointer *pMkStart = NULL;
    IMarkupPointer *pMkFinish = NULL; pMS->CreateMarkupPointer(&pMkStart);
    pMS->CreateMarkupPointer(&pMkFinish); pMS->ParseString(bstrHtmlText, 
     0, 
     &pMC, 
     pMkStart, 
     pMkFinish); if (pMC)
    {
      IHTMLDocument2 *pNewDoc = NULL;
      pMC->QueryInterface(IID_IHTMLDocument, 
      (LPVOID *) &pNewDoc);   if (pNewDoc)
      {
    // do anything with pNewDoc, in this case 
    // get the body innerText.   
    //IHTMLElement *pBody;
    //pNewDoc->get_body(&pBody); //if (pBody)
    {
      //BSTR strText;   //pBody->get_innerText(&strText);
      //pBody->Release();   //SysFreeString(strText);
    }


      IHTMLElement *pHtmlGrid = NULL;
      GetElementByID(pNewDoc, CComBSTR("DataGrid"), &pHtmlGrid);   CComQIPtr<IHTMLTable2> spGridTable = pHtmlGrid;   if (spGridTable)
      {
    BSTR strText=NULL;
    CComPtr<IHTMLElementCollection> pCellCollection; spGridTable->get_cells(&pCellCollection); SysFreeString(strText);
      } pNewDoc->Release();
      }   pMC->Release();
    } if (pMkStart)
    pMkStart->Release(); if (pMkFinish)
      pMkFinish->Release(); pMS->Release();
      }
    } pDoc->Release();
      }
      

  2.   

    晕~~
    提交出问题了~到这里 领分:)
    http://community.csdn.net/Expert/topic/3860/3860388.xml?temp=9.699649E-02