我有SDK,但上面只有语法,没有例子.
主要是不知道insertBefore中第二个参数的用法.
上面写的是_variat_t型变量,我该把什么值赋给它呀.我是这样做的,第三句有错
  IXMLDOMNodePtr node;
IXMLDOMNodePtr ParentNode;
ParentNode-> insertBefore(Newnode,node->GetnodeValue());  

解决方案 »

  1.   

    HRESULT insertBefore(
        IXMLDOMNode *newChild,
        VARIANT refChild,
        IXMLDOMNode **outNewChild);就用_variant_t 吧。
    _variant_t var(index); //index是一个位置值,也就是你要插入的
                           //对象的后一个位置
    ParentNode->insertBefore (Newnode, var, &pOut);
      

  2.   

    谢谢,那楼上是怎样用index的,我没看明白我试试
      

  3.   

    index是怎样和原来的node建立联系的呀.
      

  4.   

    index是一个位置值,也就是你要把它插入到表的哪一个位置
    你给它传递一个0,它就会插入到最后一个位置。
    _variant_t var(0);
    ....再试试
      

  5.   

    我现在就是不想给他传0,如果我要给他不是0,我该怎样把我的IXMLDOMNodePtr换为位置值呢,
      

  6.   

    MSDN 中一个Visual Basic 的参考例子:Dim xmlDoc As New Msxml2.DOMDocument
    Dim root As IXMLDOMElement
    Dim newNode As IXMLDOMNode
    Dim currNode As IXMLDOMNode
    xmlDoc.async = False
    xmlDoc.Load ("books.xml")
    Set root = xmlDoc.documentElement
    MsgBox root.xml
    Set newNode = xmlDoc.createNode(NODE_ELEMENT, "VIDEOS", "")
    Set currNode = root.insertBefore(newNode, root.childNodes.Item(1))
    MsgBox root.xml
      

  7.   

    真是太谢谢你了, 虽然我还没解决
    我已经看到这个例子了,只是不知道在VC中怎样写
    你可以去
    http://www.csdn.net/expert/topic/1019/1019608.xml?temp=5.912417E-02
    http://www.csdn.net/expert/topic/1068/1068448.xml?temp=.7026178
    里面取分了
      

  8.   

    把Visual Basic 的Set 变成C++的QueryInterface就差不多了。
      

  9.   

    关键问题是root.childNodes.Item(1))用什么来代替呢,
    真对不起,我很菜,花了您这么多时间.
      

  10.   

    匆忙写的,也没调试,没检查
    HRESULT hr;
    IXMLDOMDocument * pXMLDoc;
    IXMLDOMNode * pXDN;
    IXMLDOMNode *pNewNode,*pCurrNode;
    IXMLDOMNodeList  *pNodeList;
    IXMLDOMElement *pRoot;
    hr = CoInitialize(NULL); 
    hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, 
           IID_IXMLDOMDocument, (void**)&pXMLDoc);pXMLDoc->put_async(false);
    _variant_t var("book.xml");
    pXMLDoc->load(var, NULL);
    hr = pXMLDoc->QueryInterface(IID_IXMLDOMElement, (void**)&pRoot);
    pNewNode = pRoot->CreateNode(NODE_ELEMENT,"VIDEOS",NULL);hr = pRoot->get_childNodes(&pNodeList);int index;  //a int type number
    hr = pNodeList->item(index,&pCurrNode);_variant_t varIndex(index);
    pRoot->insertBefore(pNewNode,varIndex, NULL);
     
      

  11.   

    呵呵,这个问题我恰好知道!!!
    第二个参数就是你需要将 newNode 插入到哪一个 node 的前面的指针。在 visual c++ 中,用 #import "msxml3.dll"引入 tlb 之后,会自动的创建一堆 auto_ptr ,所谓的智能指针。下面是一个例子:IXMLDOMNodePtr secondPtr = root->firstChild;
    IXMLDOMNodePtr newPtr = dom->createNode(......);
    root->insertBefore( newPtr , secondPtr );上面的语句执行完毕之后,newPtr 就插入到了 secondPtr 的前面,如果第二个参数为 NULL,就插入到 root 的所有孩子节点列表的最后。别忘了给分,谢谢!!!