|
자료를 찾아보고 mshtml을 이용해서 만들어 보았습니다.
각 tag(element)의 child element 유무와 child element를 가져오고 싶은데
parent element를 가져오는 방법은 있어도 child element를 가져오는 방법은
모르겠습니다.
소스는 이렇습니다. 아래와 같이 하면 HTML의 모든 tag이름을 확인할 수 있습니다.
저는 각 tag(element)별 내용을 가져오고 싶습니다. 또한 element에 있는 attribute값도
확인하고 싶습니다.
MSDN을 열심히 보고 있는데 잘 모르겠습니다. MSHTML에 대한 예제가 거의 없네요.
제가 하고 있는 프로젝트는 HTML의 VML 데이터를 읽어와서 화면에 이미지를 보이도록
하는 것입니다. VML 데이터를 가지고 있는 각 Element와 attribute 값이 필요합니다.
---------------------------------------------------------------------------------
IDispatch *pDocument=CppWebBrowser1->Document;
HRESULT hr;
IHTMLDocument2* pDoc=NULL;
hr=pDocument->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc);
pDocument->Release();
if(!pDoc) return;
IHTMLElementCollection* pElemCol = NULL;
hr = pDoc->get_all(&pElemCol);
pDoc->Release();
if(!pElemCol) return;
Memo1->Align = alClient;
Memo1->Lines->Clear();
long lLength = 0;
hr = pElemCol->get_length(&lLength);
AnsiString memo;
BSTR bstr = NULL;
IHTMLElement* pElem = NULL;
for(int i=0; i<lLength; i++)
{
VARIANT varIndex;
varIndex.vt = VT_UINT;
varIndex.lVal = i;
VARIANT var2;
VariantInit( &var2 );
IDispatch* pDisp;
hr = pElemCol->item(varIndex,var2, &pDisp );
if(pDisp){
if(pElem) pElem->Release();
pDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElem);
pDisp->Release();
if(!pElem) continue;
pElem->get_tagName(&bstr);
AnsiString strTag = bstr;
AnsiString attrString;
WideString tValue;
BSTR attr = SysAllocString(L"lang");
VARIANT AttributeValue;
// attrString = (LPCTSTR)bstr_t(pElem->getAttribute(L"meta", 2, &AttributeValue));
hr=pElem->getAttribute(attr, 0, &AttributeValue);
if (hr == S_OK) {
tValue = (BSTR)AttributeValue.bstrVal;
attrString = tValue;
}
SysFreeString(attr);
pElem->Release();
pElem = NULL;
Memo1->Lines->Add(strTag);
Memo1->Lines->Add("\n");
}
}
pElemCol->Release();
-----------------------------------------------------------------------------
|