我在写VIPS算法
然后遇到一个关于文本结点的问题.对于某个特定IHTMLElement元素pElem, CComQIPtr<IHTMLElement>pElement( pElem );
 CComQIPtr<IHTMLDOMNode>pNode( pElement ); long p;
 pNode->get_nodeType( &p );这里得到的p值为1.
我自己写了一个很简单的HTML 文档简单验证了一下.基本上没有p等于3的情况出现.
对于没有标签的文字,接点里是没有的以下是msdn里的解释:
SyntaxHRESULT IHTMLDOMNode::get_nodeType(long *p);
Parametersp
Pointer to a variable of type long that receives one of the values listed in Possible Values.Possible Values1 Element node. 
3 Text node. 不知道这里的p=3 在什么情况下出现,还是text node 另有解释?
有人碰到过这种问题吗?

解决方案 »

  1.   

    寻找该节点的第一个子节点,应该就是3。
    位于标签里面的文本,不是一个独立的IHTMLElement,但可以是一个独立的IHTMLDOMNode
      

  2.   


     CComPtr<IDispatch> pDispc( pDisp );
        CComQIPtr<IHTMLElementCollection> pColl(pDispc);
    pDoc->get_all(&pColl);

    long n = 0;
    pColl->get_length( &n );

    for( long i=0;i<n;i++ )
    {
    CComPtr<IDispatch> spcoll;

    pColl->item( CComVariant( i ),CComVariant( ),&spcoll );

    CComQIPtr<IHTMLElement>pElement( spcoll );
    CComQIPtr<IHTMLDOMNode>pNode( pElement );

    if(pElement != NULL)
    {
    CComBSTR bsData;
    pElement->get_tagName(&bsData);
    long p;
    pNode->get_nodeType( &p );

    }
    }我这样循环后,发现没有P等于三的情况发生.
    我自己写的html 文档如下:<html>
    <head>
    <title>文本程序</title>
    </head>
    <body>
     <a href="http://www.sina.com.cn/">首页</a>  <a href="http://www.sohu.com.cn/">新闻</a>   <a href="http://www.baidu.com.cn/">社区</a>  <a href="http://www.sohu.com.cn/">军事</a>
    <img src="C:\Documents and Settings\Administrator\桌面\无标题.gif" align="left" />
     <p><h1>也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML
    文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。</h1></p>
    <p>也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个
    对象模型的操作,来实现对XML文档数据的操作。<p>也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个
    对象模型的操作,来实现对XML文档数据的操作。</p></p>
    这是新加的不带任何标签的文本
    </body>
    </html>
      

  3.   

    跟你说过了,标签内的文本不是独立的元素,所以元素集合中取不到独立的文本,例如你能取到“<title>文本程序</title>”元素,但是取不到“文本程序”(因为没有这种元素),要把元素查询出节点,再取节点的子节点才是文本节点。
    或者这样说:纯文本是一个节点,但不是元素。所以你上面的代码应该这样:pNode->get_firstChild()->get_nodeType试试。