关于用 IE 接口 解析HTML 文件的问题
大家好
我想解析一份本地的HTML 文件 截取他的 URL 链接
实现效果: (和 在IE 中 右击 点 用**下载全部链接 相同) 得到链接名 和链接
我用的是VC
我不想在上面增加一个 CHtmlView ,把它打开, 再解析 。
我只是想把它 以文件的形式 打开、 读取 再直接解析。
谢谢大家~
问题点数:50、回复次数:5Top
1 楼newkey007(无限天空 www.xDrv.com)回复于 2005-03-16 21:01:35 得分 50
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();
}Top
2 楼vicky_jam(★天使亲蛙☆)回复于 2005-03-17 09:41:46 得分 0
看了半天
调了半天
搜了半天
还是没有 调通~~
知道 这段代码 一定可以
只因我是菜鸟
唉 ~ 样样事情都要 “饭来张口 ”
求大哥 给个 全的 让我分析分析
好事做到底啊:)
Top
3 楼vicky_jam(★天使亲蛙☆)回复于 2005-03-18 06:46:30 得分 0
谢谢了 大哥:)
Top
4 楼vicky_jam(★天使亲蛙☆)回复于 2005-03-18 06:52:21 得分 0
晕~~
提交出问题了~
到这里 领分:)
http://community.csdn.net/Expert/topic/3860/3860388.xml?temp=9.699649E-02Top
5 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2005-07-29 03:46:23 得分 0
markTop




