网页上是这样的: 
<div> <input value='1' type='radio'> </input>10% </div> 
<div> <input value='2' type='radio'> </input>20% </div> 我现在已经获得了input元素节点的IHTMLElement,现在想获得10%的那个文本节点值。代码如下:element为当前的input的IHTMLElement 
CComPtr <IHTMLElement> parentElement; 
CComPtr <IHTMLElementCollection> elementCollection; 
CComPtr <IDispatch> pDispatch; 
VARIANT value; 
long length; element->get_parentElement(&parentElement); 
parentElement->get_children(&pDispatch); 
pDispatch->QueryInterface(IID_IHTMLElementCollection, (VOID**)&elementCollection); 
elementCollection->get_length(&length); 
for (INT i = 0; i < length; i++) 

IDispatch *pDispInputText = NULL;  
CComVariant vIndex=i;  
elementCollection->item(vIndex,vIndex,&pDispInputText); 
CComPtr <IHTMLElement> pElemInputText;  
hr=pDispInputText->QueryInterface(IID_IHTMLElement,(void**)&pElemInputText); 
} 上面得到的length是1,而最后得到的pElemInputText还是当前input的IHTMLElement,没能得到其后的文本节点。 
input后的文本节点应该是他的兄弟节点啊,可是为什么get_length只能得到1?至少应为2啊。在线等

解决方案 »

  1.   

    pDoc2->get_all(&objAllElement);
    objAllElement->get_length(&nElementCount);这样看可否取到所有的
      

  2.   

    ls楼上去网页所有元素,我只取input的兄弟元素。
    还有,我取的是文本节点,可是取出的全部是元素节点。
      

  3.   

    文本不是元素,但是是节点,所以取兄弟元素是读不到的。要这样:
    element->QueryInterface --> IHTMLDOMNode
    IHTMLDOMNode::get_nextSibling --> IHTMLDOMNode (node2)
    assert(node2->get_nodeType() == 3);
    node2->get_nodeValue --> VARIANT // VT_BSTR "10%"如果不用节点方式,可以这样取:
    element->get_parentElement --> IHTMLElement
    IHTMLElement::get_innerText --> BSTR // == "10%"