VC6.0下项目使用VS2005打开时出现好多错误,是关于MSXML的,xml的不熟悉,但是这个项目要搞定啊,谁能帮忙解决下,很急的。
我粘贴错误让大家看下:错误 201 error C2039: 'firstChild' : is not a member of 'IXMLDOMNode'
错误 197 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 206 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 207 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 209 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 218 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 219 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 223 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 227 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 228 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 233 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 235 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 253 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 254 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 255 error C2039: 'nextSibling' : is not a member of 'IXMLDOMNode'
错误 198 error C2039: 'nodeName' : is not a member of 'IXMLDOMNode'
错误 222 error C2039: 'nodeName' : is not a member of 'IXMLDOMNode'
错误 226 error C2039: 'nodeName' : is not a member of 'IXMLDOMNode'
错误 250 error C2039: 'nodeName' : is not a member of 'IXMLDOMNode'
错误 251 error C2039: 'nodeName' : is not a member of 'IXMLDOMNode'
错误 252 error C2039: 'previousSibling' : is not a member of 'IXMLDOMNode'
错误 244 error C2039: 'text' : is not a member of 'IXMLDOMElement'
错误 199 error C2039: 'text' : is not a member of 'IXMLDOMNode'
错误 202 error C2039: 'text' : is not a member of 'IXMLDOMNode'
错误 211 error C2039: 'text' : is not a member of 'IXMLDOMNode'
错误 213 error C2039: 'text' : is not a member of 'IXMLDOMNode'
错误 215 error C2039: 'text' : is not a member of 'IXMLDOMNode'
错误 224 error C2039: 'text' : is not a member of 'IXMLDOMNode'
错误 229 error C2039: 'text' : is not a member of 'IXMLDOMNode'
错误 200 error C2593: 'operator +=' is ambiguous
错误 203 error C2593: 'operator +=' is ambiguous
错误 191 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 195 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 208 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 210 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 212 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 232 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 234 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 239 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 261 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 263 error C2660: 'IXMLDOMNamedNodeMap::getNamedItem' : function does not take 1 arguments
错误 245 error C2660: 'IXMLDOMNode::appendChild' : function does not take 1 arguments
错误 246 error C2664: 'CDOMOperation::AddOptionItem' : cannot convert parameter 1 from 'IXMLDOMNodePtr' to 'MSXML2::IXMLDOMNodePtr &'
错误 249 error C2664: 'CDOMOperation::GetNodeSection' : cannot convert parameter 2 from 'IXMLDOMNodePtr' to 'MSXML2::IXMLDOMNodePtr &'
错误 242 error C2664: 'IXMLDOMNode::get_nextSibling' : cannot convert parameter 1 from 'MSXML2::IXMLDOMNode **' to 'IXMLDOMNode **'
错误 216 error C2664: 'MSXML2::IXMLDOMNode::appendChild' : cannot convert parameter 1 from 'IXMLDOMNodePtr' to 'MSXML2::IXMLDOMNode *'
错误 190 error C2664: 'MSXML2::IXMLDOMNode::get_attributes' : cannot convert parameter 1 from 'IXMLDOMNamedNodeMap **' to 'MSXML2::IXMLDOMNamedNodeMap **'
错误 194 error C2664: 'MSXML2::IXMLDOMNode::get_attributes' : cannot convert parameter 1 from 'IXMLDOMNamedNodeMap **' to 'MSXML2::IXMLDOMNamedNodeMap **'
错误 238 error C2664: 'MSXML2::IXMLDOMNode::get_attributes' : cannot convert parameter 1 from 'IXMLDOMNamedNodeMap **' to 'MSXML2::IXMLDOMNamedNodeMap **'
错误 260 error C2664: 'MSXML2::IXMLDOMNode::get_attributes' : cannot convert parameter 1 from 'IXMLDOMNamedNodeMap **' to 'MSXML2::IXMLDOMNamedNodeMap **'
错误 262 error C2664: 'MSXML2::IXMLDOMNode::get_attributes' : cannot convert parameter 1 from 'IXMLDOMNamedNodeMap **' to 'MSXML2::IXMLDOMNamedNodeMap **'
错误 243 error C2664: 'MSXML2::IXMLDOMNode::insertBefore' : cannot convert parameter 1 from 'IXMLDOMElementPtr' to 'MSXML2::IXMLDOMNode *'
错误 247 error C2664: 'MSXML2::IXMLDOMNode::insertBefore' : cannot convert parameter 1 from 'IXMLDOMElementPtr' to 'MSXML2::IXMLDOMNode *'
错误 220 error C2664: 'MSXML2::IXMLDOMNode::removeChild' : cannot convert parameter 1 from 'IXMLDOMNodePtr' to 'MSXML2::IXMLDOMNode *'
错误 256 error C2664: 'MSXML2::IXMLDOMNode::removeChild' : cannot convert parameter 1 from 'IXMLDOMNodePtr' to 'MSXML2::IXMLDOMNode *'
错误 257 error C2664: 'MSXML2::IXMLDOMNode::removeChild' : cannot convert parameter 1 from 'IXMLDOMNodePtr' to 'MSXML2::IXMLDOMNode *'
错误 241 error C2872: 'IXMLDOMElementPtr' : ambiguous symbol
错误 189 error C2872: 'IXMLDOMNamedNodeMapPtr' : ambiguous symbol
错误 192 error C2872: 'IXMLDOMNamedNodeMapPtr' : ambiguous symbol
错误 205 error C2872: 'IXMLDOMNamedNodeMapPtr' : ambiguous symbol
错误 231 error C2872: 'IXMLDOMNamedNodeMapPtr' : ambiguous symbol
错误 236 error C2872: 'IXMLDOMNamedNodeMapPtr' : ambiguous symbol
错误 258 error C2872: 'IXMLDOMNamedNodeMapPtr' : ambiguous symbol
错误 187 error C2872: 'IXMLDOMNode' : ambiguous symbol
错误 188 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 193 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 196 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 204 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 214 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 217 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 221 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 225 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 230 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 237 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 240 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 248 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
错误 259 error C2872: 'IXMLDOMNodePtr' : ambiguous symbol
应该是版本的问题,不过不知到是什么问题,怎么改的?

解决方案 »

  1.   

    以下是这个CPP文件的所有源码:
    #pragma  once
    #include "stdafx.h"
    #include "DOMOperation.h"
    #import "msxml4.dll" //引入类型库
    #include <msxml2.h>
    using namespace MSXML2;
    // CComPtr<IXMLDOMNode> pNode;
    CDOMOperation::CDOMOperation()
    {
    HRESULT hr =m_pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
    if(!SUCCEEDED(hr)) 
    {
    AfxMessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
    }
    else
    {
    tokentext=_bstr_t("text");
    tokenoption=_bstr_t("option");
    tokenselect=_bstr_t("select");
    tokenitem=_bstr_t("item");
    tokencaretpos=_bstr_t("caretpos");
    m_pDoc->loadXML("<?xml version=\"1.0\" encoding=\"gb2312\" standalone=\"no\"?><template><text caretpos=\"0\"></text></template>");
    m_pElement=m_pDoc->GetdocumentElement();
    m_pNode=m_pElement->firstChild;
    }
    }CDOMOperation::~CDOMOperation()
    {
    }void CDOMOperation::LoadXML(CString& XMLText)
    {
    m_pDoc->preserveWhiteSpace=VARIANT_TRUE;
    m_pDoc->loadXML((LPCTSTR)XMLText);
    m_pElement=m_pDoc->GetdocumentElement();
    if(NULL==m_pElement)
    {
    MSXML2::IXMLDOMProcessingInstructionPtr pi;
    pi = m_pDoc->createProcessingInstruction((_bstr_t)"xml",(_bstr_t)"version='1.0' encoding='gb2312' standalone='no' ");
    if(NULL!=pi)         
    {
    m_pDoc->appendChild(pi);
    }
    MSXML2::IXMLDOMElementPtr pNewElement;
    m_pElement=m_pDoc->createElement((_bstr_t)"template");
    pNewElement=m_pDoc->createElement(tokentext);
    pNewElement->setAttribute(tokencaretpos,CComVariant("0"));
    m_pElement->appendChild(pNewElement);
    m_pElement->firstChild->put_text((_bstr_t)(LPCTSTR)XMLText); _bstr_t bstrAttributeName =_T("Company");
    _variant_t varValue =_T("BOYI");

    m_pElement->setAttribute(bstrAttributeName, varValue);
    bstrAttributeName =_T("Version");
    varValue =_T("1.0");
    m_pElement->setAttribute(bstrAttributeName, varValue);
    m_pDoc->appendChild(m_pElement);
    }
    m_pNode=m_pElement->firstChild;
    }int CDOMOperation::GetNodeStartPos(MSXML2::IXMLDOMNodePtr& pDocNode)
    {
    if(NULL==pDocNode)
        return -1;
    int ResultPos;
    IXMLDOMNodePtr pChildNode;
    IXMLDOMNamedNodeMapPtr pNodeMap;
    VARIANT vValue;
    pDocNode->get_attributes(&pNodeMap);//必定为option
    if ( pNodeMap == NULL ) 
    return -1 ; 
    VariantInit(&vValue);
    pChildNode=pNodeMap->getNamedItem(tokencaretpos);
    if ( pChildNode == NULL ) 
    return -1 ;
    pChildNode->get_nodeValue(&vValue);
    sscanf((LPCTSTR)(_bstr_t)(vValue),"%d",&ResultPos);
    return ResultPos;
    }int CDOMOperation::GetNodeEndPos(MSXML2::IXMLDOMNodePtr& pDocNode)
    {
    if(NULL==pDocNode)
    return 0;
    else
    return GetNodeStartPos(pDocNode->nextSibling);
    }void CDOMOperation::RefreshDOMPos(const int pos,const int offset)
    {
    //将m_pNode的值设置为pos所在区的Node
    MSXML2::IXMLDOMNodePtr pDocNode=GetNode(pos);
    if(0==offset || NULL==pDocNode)
    return;
    VARIANT vValue;
    int temppos;
    char charbuffer[20];
    IXMLDOMNamedNodeMapPtr pNodeMap;
    IXMLDOMNodePtr pNode;
    for(pDocNode=pDocNode->nextSibling;NULL!=pDocNode;pDocNode=pDocNode->nextSibling)
    {
    VariantInit(&vValue);
    pDocNode->get_attributes(&pNodeMap);
    pNode=pNodeMap->getNamedItem(tokencaretpos);
    pNode->get_nodeValue(&vValue);
    //vValue=pDocNode->getAttribute(tokencaretpos);
    temppos=_ttoi((_bstr_t)vValue);
    temppos+=offset;
    pNode->put_nodeValue(CComVariant(_itoa(temppos,charbuffer,10)));
    //pDocNode->setAttribute(tokencaretpos,_itoa(temppos,charbuffer,10));
    }
    }BOOL CDOMOperation::TextParse(CString& ResultStr)
    {
    if(NULL==m_pElement)
    return FALSE;

    IXMLDOMNodePtr pNode, pChildNode;
    //循环显示所有的文本
    for (pNode = m_pElement->firstChild; NULL != pNode; pNode = pNode->nextSibling)
    {
    //pNode->get_nodeName(&textstr);
    _bstr_t nodestr( pNode->nodeName, FALSE);//necessary to avoid a memory leak
    if( nodestr == tokentext )//text节点,直接输出即可
    {
    _bstr_t tempstr(pNode->text, FALSE);
    ResultStr += tempstr;
    }
    else //option节点,选择第一个儿子,直接输出即可
    {
    pChildNode=pNode->firstChild;
    if(NULL != pChildNode)
    {
    _bstr_t tempstr( pChildNode->text, FALSE);
    ResultStr += tempstr;
    }
    }
    }
    ResultStr.Replace("\r\n","\n");
    return TRUE;
    }//该算法仅刷新DOM中所有text节点的text值
    //对于option中select节点的值和richedit值同步则不由该函数负责
    BOOL CDOMOperation::RefreshDOMText(CString& InputStr)
    {
    if(NULL==m_pElement)
    return FALSE;
    InputStr.Replace("\r\n","\n");//避免读入的\r\n被认为是两个字
    WCHAR *pUniBuffer=NULL;
    char *pMBBuffer=NULL;
    int LengthOfInputStr,BufferSize;
    LengthOfInputStr=InputStr.GetLength();
    BufferSize=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)InputStr,LengthOfInputStr,NULL,0);
    pUniBuffer=new WCHAR[BufferSize+1]; 
    if(NULL==pUniBuffer)
    return FALSE;
    MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)InputStr,LengthOfInputStr,pUniBuffer,BufferSize+1);
    pUniBuffer[BufferSize]=0;

    IXMLDOMNodePtr pNode,pNextNode,pChildNode;
    IXMLDOMNamedNodeMapPtr pNodeMap;
    VARIANT vValue;
    int startpos,endpos;
    for (pNode = m_pElement->firstChild; NULL != pNode->nextSibling; pNode = pNextNode->nextSibling)
    {

    pNode->get_attributes(&pNodeMap);//必定为text
    VariantInit(&vValue);
    pChildNode=pNodeMap->getNamedItem(tokencaretpos);
    pChildNode->get_nodeValue(&vValue);
    sscanf((LPCTSTR)(_bstr_t)(vValue),"%d",&startpos);

    pNextNode=pNode->nextSibling;
    pNextNode->get_attributes(&pNodeMap);//必定为option
    VariantInit(&vValue);
    pChildNode=pNodeMap->getNamedItem(tokencaretpos);
    pChildNode->get_nodeValue(&vValue);
    sscanf((LPCTSTR)(_bstr_t)(vValue),"%d",&endpos);
    BufferSize=WideCharToMultiByte(CP_ACP, 0, pUniBuffer+startpos, endpos-startpos, NULL, 0, NULL, NULL);
    if(pMBBuffer)
    {
    delete [] pMBBuffer;
    pMBBuffer=NULL;
    }
    pMBBuffer = new char [BufferSize+1];
    WideCharToMultiByte(CP_ACP, 0, pUniBuffer+startpos, endpos-startpos, pMBBuffer, BufferSize+1, NULL, NULL);
    pMBBuffer[BufferSize]=0;
    //TokenStr=InputStr.Mid(startpos,endpos-startpos);
    //(_bstr_t)(LPCTSTR)TokenStr
    pNode->text=(_bstr_t)pMBBuffer;
    }
    pNode->get_attributes(&pNodeMap);
    VariantInit(&vValue);
    pChildNode=pNodeMap->getNamedItem(tokencaretpos);
    pChildNode->get_nodeValue(&vValue);
    sscanf((LPCTSTR)(_bstr_t)(vValue),"%d",&startpos);

    //TokenStr=InputStr.Mid(startpos);
    BufferSize=WideCharToMultiByte(CP_ACP, 0, pUniBuffer+startpos, -1, NULL, 0, NULL, NULL);
    if(pMBBuffer)
    {
    delete [] pMBBuffer;
    pMBBuffer=NULL;
    }
    pMBBuffer = new char [BufferSize+1];
    WideCharToMultiByte(CP_ACP, 0, pUniBuffer+startpos, -1, pMBBuffer, BufferSize+1, NULL, NULL);
    pMBBuffer[BufferSize]=0;
    pNode->text=(_bstr_t)pMBBuffer;
    delete [] pUniBuffer;
    delete [] pMBBuffer;
    return TRUE;
    }void CDOMOperation::AddOptionItem(MSXML2::IXMLDOMNodePtr& pDocNode, CString & ItemStr)
    {
    ItemStr.Replace("\r\n","\n");
    if(ItemStr.IsEmpty())
    return;
    IXMLDOMNodePtr pNewElement;
    pNewElement=pDocNode->ownerDocument->createElement(tokenitem);
    pNewElement->text=(_bstr_t)(LPCTSTR)ItemStr;
    pDocNode->appendChild(pNewElement);
    }void CDOMOperation::RefreshSelectItem(MSXML2::IXMLDOMNodePtr& pDocNode, CString & SelectStr)
    {
    SelectStr.Replace("\r\n","\n");
    if(tokenoption!=pDocNode->nodeName)
    return;
    MSXML2::IXMLDOMNodePtr pNode;
    pNode=pDocNode->firstChild;
    pNode->text=(_bstr_t)(LPCTSTR)SelectStr;
    }void CDOMOperation::RefreshOptionItem(MSXML2::IXMLDOMNodePtr& pDocNode, CString & Items)
    {
    Items.Replace("\r\n","\n");
    //删去所有的Item
    IXMLDOMNodePtr pFirstNode,pNode;
    pFirstNode=pDocNode->firstChild;//第一个节点应该为<select>,在本函数内不更新
    pNode=pFirstNode->nextSibling;
    for(;NULL!=pNode;pNode=pFirstNode->nextSibling)
    pDocNode->removeChild(pNode);
    //按照英文的分号<;>作为间隔符,split所有选项
    //liguomin11.11
    CString Token,TempItem;
    Token.Empty();
    int prepos=0,curpos=0,startpos=0,endpos=0;
    TempItem.Format("%s",Items);
    TempItem.TrimLeft(';');
    // TempItem.TrimRight(';');
    while((curpos=TempItem.Find(';',prepos))>=0)
    {
    if (curpos<TempItem.GetLength()-1)
    if ((TempItem.GetAt(curpos-1)=='"')&&(TempItem.GetAt(curpos+1)=='"')&&((curpos-3<0)||(TempItem.GetAt(curpos-2)!=';')||(TempItem.GetAt(curpos-3)!='"')))
    {
                    TempItem.Format("%s;%s",TempItem.Mid(0,curpos-1),TempItem.Mid(curpos+2,TempItem.GetLength()));
    curpos=curpos-1;
    }
    else
    {
    Token=TempItem.Mid(startpos,curpos-startpos);
    //插入<item>节点
    if(!Token.IsEmpty())
    AddOptionItem(pDocNode,Token);
    startpos=curpos+1;
    }
    if (curpos==TempItem.GetLength()-1)
    {
    Token=TempItem.Mid(startpos,curpos-startpos);
    //插入<item>节点
    if(!Token.IsEmpty())
    AddOptionItem(pDocNode,Token);
    startpos=curpos+1;
    }
    prepos=curpos+1;
    }//while//end--liguomin11.11
    /* CString Token;
    int prepos=0,curpos;
    while((curpos=Items.Find(";",prepos))>=0)
    {
    Token=Items.Mid(prepos,curpos-prepos);
    //插入<item>节点
    AddOptionItem(pDocNode,Token);
    prepos=curpos+1;
    }
    Token=Items.Mid(prepos);
    AddOptionItem(pDocNode,Token);*/
    }CString CDOMOperation::GetOptionString(MSXML2::IXMLDOMNodePtr& pDocNode)
    {
    CString ReturnStr;
    if(NULL==pDocNode)
    return ReturnStr;
    if(pDocNode->nodeName!=tokenoption)
    return ReturnStr;
    IXMLDOMNodePtr pNode;
    pNode=pDocNode->firstChild;
    if(pNode->nodeName!=tokenselect)
    return ReturnStr;
    CString TempToken;
    for(;NULL!=pNode;pNode=pNode->nextSibling)
    {
    TempToken=(char *)(pNode->text);
    //liguomin11.11
    int curpos=0,prepos=0;     
    while((curpos=TempToken.Find(";",prepos))>=0)
    {
    TempToken.Format("%s\";\"%s",TempToken.Mid(0,curpos),TempToken.Mid(curpos+1,TempToken.GetLength()));
    prepos=curpos+3;   
    }//end--liguomin11.11
    ReturnStr=ReturnStr+TempToken+";";
    }
    //ReturnStr.TrimRight(";");
    return ReturnStr;
    }
      

  2.   


    CString CDOMOperation::GetItemsString(MSXML2::IXMLDOMNodePtr& pDocNode)
    {
    CString ReturnStr;
    if(NULL==pDocNode)
    return ReturnStr;
    if(pDocNode->nodeName!=tokenoption)
    return ReturnStr;
    IXMLDOMNodePtr pNode;
    pNode=pDocNode->firstChild;
    if(pNode->nodeName!=tokenselect)
    return ReturnStr;
    CString TempToken;
    for(pNode=pNode->nextSibling;NULL!=pNode;pNode=pNode->nextSibling)
    {
    TempToken=(char *)(pNode->text);
    //liguomin11.11
    int curpos=0,prepos=0;     
    while((curpos=TempToken.Find(";",prepos))>=0)
    {
    TempToken.Format("%s\";\"%s",TempToken.Mid(0,curpos),TempToken.Mid(curpos+1,TempToken.GetLength()));
    prepos=curpos+3;   
    }//end--liguomin11.11
    ReturnStr=ReturnStr+TempToken+";";
    }
    return ReturnStr;
    }MSXML2::IXMLDOMNodePtr CDOMOperation::GetNode(const int pos)
    {
    ASSERT(pos>=0);
    if(NULL==m_pElement)
    m_pNode=NULL;
    else
    {
    IXMLDOMNodePtr pCurNode,pNextNode,pAttribNode;
    IXMLDOMNamedNodeMapPtr pNodeMap;
    VARIANT vValue;
    int startpos,endpos;
    BOOL FindSection=FALSE;
    pCurNode = m_pElement->firstChild;
    ASSERT(NULL!=pCurNode);
    pCurNode->get_attributes(&pNodeMap);
    VariantInit(&vValue);
    pAttribNode=pNodeMap->getNamedItem(tokencaretpos);
    pAttribNode->get_nodeValue(&vValue);
    sscanf((LPCTSTR)(_bstr_t)(vValue),"%d",&startpos);
    ASSERT(0==startpos);
    pNextNode=pCurNode->nextSibling;
    for (; NULL != pNextNode;)
    {
    pNextNode->get_attributes(&pNodeMap);
    VariantInit(&vValue);
    pAttribNode=pNodeMap->getNamedItem(tokencaretpos);
    pAttribNode->get_nodeValue(&vValue);
    sscanf((LPCTSTR)(_bstr_t)(vValue),"%d",&endpos);
    if(pos>=startpos && pos<endpos)
    break;
    //后继操作
    startpos=endpos;
    pCurNode=pNextNode;
    pNextNode=pCurNode->nextSibling;
    }
    m_pNode=pCurNode;
    }
    return m_pNode;
    }void CDOMOperation::GetNodeSection( const CHARRANGE& selrange, MSXML2::IXMLDOMNodePtr& StartNode, MSXML2::IXMLDOMNodePtr& EndNode)
    {
    //请勿修改两条GetNode语句的顺序
    EndNode=GetNode(selrange.cpMax);
    StartNode=GetNode(selrange.cpMin); //如果selrange参数有异常情况,则StartNode和EndNode均为selrange.cpMin所指的Node
    if(selrange.cpMax<=selrange.cpMin)
    {
    EndNode=StartNode;
    return;
    }
    IXMLDOMNamedNodeMapPtr pNodeMap;
    IXMLDOMNodePtr pAttribNode;
    VARIANT vValue;
    int temppos;
    VariantInit(&vValue);
    EndNode->get_attributes(&pNodeMap);
    pAttribNode=pNodeMap->getNamedItem(tokencaretpos);
    pAttribNode->get_nodeValue(&vValue);
    sscanf((LPCTSTR)(_bstr_t)(vValue),"%d",&temppos);
    if(temppos == selrange.cpMax)
    EndNode=EndNode->previousSibling;
    }MSXML2::IXMLDOMNodePtr CDOMOperation::AddSection(const CHARRANGE& selrange, LPCTSTR pText)
    {
    char charbuffer[20];
    MSXML2::IXMLDOMNode *pNode;
    IXMLDOMNodePtr pTextNode,pReturnNode;
    IXMLDOMElementPtr pNewElement;
    pTextNode=SubSection(selrange);
    pTextNode->get_nextSibling(&pNode);
    CComVariant refNode(&(*pNode));
    //初次新建<option>节点,必须同时添加<select>和<item>节点
    //但在更新节点时,允许<option>节点下无<item>节点
    //务必保证有且仅有一个<select>节点 且必须为<option>的第一个子节点
    //新<option>节点
    pNewElement=m_pElement->ownerDocument->createElement(tokenoption);
    pNewElement->setAttribute(tokencaretpos,CComVariant(itoa(selrange.cpMin,charbuffer,10)));
    pReturnNode = m_pElement->insertBefore(pNewElement,refNode);
    //新<select>节点
    pNewElement=m_pElement->ownerDocument->createElement(tokenselect);
    pNewElement->text=_bstr_t(pText);
    pReturnNode->appendChild(pNewElement);
    //新<item>节点
    CString temp;
    temp.Format("%s",pText);
    AddOptionItem(pReturnNode,temp);
    //新<text>节点
    pNewElement=m_pElement->ownerDocument->createElement(tokentext);
    pNewElement->setAttribute(tokencaretpos,CComVariant(itoa(selrange.cpMax,charbuffer,10)));
    m_pElement->insertBefore(pNewElement,refNode);
    m_pNode=pReturnNode;
    return m_pNode;
    }MSXML2::IXMLDOMNodePtr CDOMOperation::SubSection(const CHARRANGE& selrange)
    {
    IXMLDOMNodePtr StartNode,EndNode,pNode,pTempNode;
    GetNodeSection(selrange,StartNode,EndNode);

    _bstr_t startnodestr(StartNode->nodeName,FALSE);//necessary to avoid a memory leak
    _bstr_t endnodestr(EndNode->nodeName,FALSE);//necessary to avoid a memory leak
    if(startnodestr==tokenoption)
    StartNode=StartNode->previousSibling;
    if(endnodestr==tokenoption)
    EndNode=EndNode->nextSibling;
    if(StartNode==EndNode)
    return StartNode;
    for(pNode=StartNode->nextSibling;pNode!=EndNode;)
    {
    pTempNode=pNode;
    pNode=pTempNode->nextSibling;
    m_pElement->removeChild(pTempNode);
    }
    m_pElement->removeChild(EndNode);
    m_pNode=StartNode;
    return m_pNode;
    }MSXML2::IXMLDOMNodePtr CDOMOperation::PreHotSection(MSXML2::IXMLDOMNodePtr& pNode)
    {
    MSXML2::IXMLDOMNodePtr pTempNode=pNode;
    if(NULL==pTempNode)
    m_pNode=NULL;
    else if(pTempNode->nodeName==tokenoption)
    {
    pTempNode=pTempNode->previousSibling;
    if(NULL==pTempNode)
    m_pNode=NULL;
    else
    m_pNode=pTempNode->previousSibling;
    }
    else //assert: if(pTempNode->nodeName==tokentext)
    m_pNode=NULL;
    return m_pNode;
    }MSXML2::IXMLDOMNodePtr CDOMOperation::NextHotSection(MSXML2::IXMLDOMNodePtr& pNode)
    {
    MSXML2::IXMLDOMNodePtr pTempNode=pNode;
    if(NULL==pTempNode)
    m_pNode=NULL;
    else if(pTempNode->nodeName==tokenoption)
    {
    pTempNode=pTempNode->nextSibling;
    if(NULL==pTempNode)
    m_pNode=NULL;
    else
    m_pNode=pTempNode->nextSibling;
    }
    else //assert: if(pTempNode->nodeName==tokentext)
    m_pNode=NULL;
    return m_pNode;
    }////////////////////////////////////
    //added by yingwenhao 2003-11-10
    //测试XML字符窜格式是否标准
    BOOL CDOMOperation::TestXMLFormate()
    {
    VARIANT vValue;
    int TextPos=0,OptionPos=0,Len=0,tempLen;
    IXMLDOMNamedNodeMapPtr pNodeMap;
    IXMLDOMNodePtr pNode;
    BOOL flag=TRUE;

    BOOL IsText=TRUE; //指示当前节点是否为Text节点
    m_pElement=m_pDoc->GetdocumentElement();
    if(NULL==m_pElement)//全空
    return flag;
    MSXML2::IXMLDOMNodePtr pDocNode=NULL;
    MSXML2::IXMLDOMNodePtr pChildNode=NULL;

    for(pDocNode=m_pElement->firstChild;NULL!=pDocNode;pDocNode=pDocNode->nextSibling)
    {
    _bstr_t nodestr(pDocNode->nodeName,FALSE);//necessary to avoid a memory leak
    if(nodestr==tokentext)//text节点
    {
    if(!IsText)
    {
    flag=FALSE;
    break;
    }
    else
    {
    IsText=FALSE;//指示下一个节点为不是Text
    _bstr_t tempstr(pDocNode->text,FALSE);
    tempLen=tempstr.length();
    pDocNode->get_attributes(&pNodeMap);
    VariantInit(&vValue);
    pNode=pNodeMap->getNamedItem(tokencaretpos);
    pNode->get_nodeValue(&vValue);
    TextPos=_ttoi((_bstr_t)vValue);
    if(OptionPos+Len!=TextPos)
    {
    flag=FALSE;
    break;
    }
    else
    {
    Len=tempLen;
    }
    }
    }
    else //option节点,选择第一个儿子,直接输出即可
    {
    if(IsText)
    {
    flag=FALSE;
    break;
    }
    else
    {
    IsText=TRUE;//指示下一个节点为Text
    pDocNode->get_attributes(&pNodeMap);
    VariantInit(&vValue);
    pNode=pNodeMap->getNamedItem(tokencaretpos);
    pNode->get_nodeValue(&vValue);
    OptionPos=_ttoi((_bstr_t)vValue);
    if(TextPos+Len!=OptionPos)
    {
    flag=FALSE;
    break;
    }
    else
    {
    pChildNode=pDocNode->firstChild;
    if(NULL != pChildNode)
    {
    _bstr_t tempstr(pChildNode->text,FALSE);
    Len=tempstr.length();
    }
    else//select节点 必须要有
    {
    flag=FALSE;
    break;
    }
    }
    }
    }
    }
    if(NULL==pDocNode)//全部结束 最后一个节点必须为Text
    {
    if(TRUE==IsText)
    flag=FALSE;
    }
    return flag;
    }
      

  3.   

    感觉上是2005升级了MSXML
    一个比较极端的做法是用6.0下的MSXML相关文件覆盖掉2005下的
    但是建议覆盖之前先备份
    这个程序调完之后再换回来
      

  4.   

    自己解决了,安装一个msxml软件,再在报错的地方加上MSXML2::就搞定了