請幫助我使用MSHTML
進行html解析。我對得到一個特定標籤的所有屬性代碼是這樣的在HTML解析中使用IHTMLDOMAttribute獲取Cpp中標記的屬性
void GetAttributes(MSHTML::IHTMLElementPtr pColumnInnerElement)
{
IHTMLDOMNode *pElemDN = NULL;
LONG lACLength;
MSHTML::IHTMLAttributeCollection *pAttrColl;
IDispatch* pACDisp;
VARIANT vACIndex;
IDispatch* pItemDisp;
IHTMLDOMAttribute* pItem;
BSTR bstrName;
VARIANT vValue;
VARIANT_BOOL vbSpecified;
pColumnInnerElement->QueryInterface(IID_IHTMLDOMNode, (void**)&pElemDN);
if (pElemDN != NULL)
{
pElemDN->get_attributes(&pACDisp);
pACDisp->QueryInterface(IID_IHTMLAttributeCollection, (void**)&pAttrColl);
pAttrColl->get_length(&lACLength);
vACIndex.vt = VT_I4;
for (int i = 0; i < lACLength; i++)
{
vACIndex.lVal = i;
pItemDisp = pAttrColl->item(&vACIndex);
if (pItemDisp != NULL)
{
pItemDisp->QueryInterface(IID_IHTMLDOMAttribute, (void**)&pItem);
pItem->get_specified(&vbSpecified);
pItem->get_nodeName(&bstrName);
pItem->get_nodeValue(&vValue);
if (vbSpecified)
cout<<_com_util::ConvertBSTRToString(bstrName)<<" :"<<_com_util::ConvertBSTRToString(vValue.bstrVal)<<endl;
pItem->Release();
}
pItemDisp->Release();
}
pElemDN->Release();
pACDisp->Release();
pAttrColl->Release();
}
}
的問題是對於給定的標籤<input id="Switch l_id2" class="pointer" name="Switch" onclick='SetControl("Switch l",1)' type="button" value="OK">
它打印除了value
屬性的所有屬性。 get_specified
函數返回false
爲value
屬性。
我的輸出
id :Switch l_id2
class :pointer
onclick :SetControl("Switch l",1)
type :button
name :Switch
任何想法,爲什麼?還有哪些其他屬性可能會有這個問題?
注意
我試過這樣。它顯示value
的正確屬性結果。
if (strcmp(_com_util::ConvertBSTRToString(bstrName), "value") == 0)
{
cout<<_com_util::ConvertBSTRToString(bstrName)<<" :"<<_com_util::ConvertBSTRToString(vValue.bstrVal)<<endl;
}
你的筆記是什麼意思?是否由於vbSpecified測試? –
我補充說明顯示正確的值在vValue.bstrVal。但仍然vbSpecified返回false – 999k
不確定指定的標誌總是有意義的。您是否嘗試更改文檔兼容模式(http://msdn.microsoft.com/zh-cn/library/cc288325.aspx)。例如,當IE處於IE9'標準模式'時,指定爲始終爲TRUE。 –