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
应该是版本的问题,不过不知到是什么问题,怎么改的?
我粘贴错误让大家看下:错误 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
应该是版本的问题,不过不知到是什么问题,怎么改的?
解决方案 »
- 关于信息的传递问题
- 录制鼠标点击并模拟的问题(在线等)
- 关于VC消息注册
- CorelDRAW的cdr格式文件转换为BMP文件,我应该怎么操作?
- 求1个API定时器函数,比SetTimer多带个指针参数的
- 请问哪里可以找到各种ActiveX控件+ADO进行数据库编程的例子或详细说明啊?!
- 这段代码为什么错,刚才贴了没人理我,再贴,在线等
- gets()和scanf()函数疑问,求大师指点!
- 请问在VC程序里怎么控制静态文本的内容啊?
- 怎么在CStaiic控件中实时更新位图
- 求大神指导,动态改变对话框的大小,求客户区的准确定义
- 一个Activex控件嵌入网页的一个div层,另一个div层悬浮在该层,如何使控件也能被覆盖
#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;
}
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;
}
一个比较极端的做法是用6.0下的MSXML相关文件覆盖掉2005下的
但是建议覆盖之前先备份
这个程序调完之后再换回来