如何在WinCE下实现xml文件的读写? 求解~~ 请问如何在WinCE下实现xml文件的读写?能具体点吗?给个实例也好但是要用MFC编写有用的话,给分 邮箱[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能给个tinyxml能用的实例吗?我找到些 但是运行就有错误 谢啦 哦,能给个能用的实例吗? 还有路径该如何设置?像\\he.xml这样的吗?在哪个目录下可以找到啊?我不太懂 我现在不做mobile了所以没有ce的例子不过这个东西何在PC上没有分别网上有很多例子至于你说路径不是特别明白你的意思 我说的路径就是用cup创建一个xml文档时需要把这个xml存在什么位置吗?就像存在PC的C盘根目录 就应该这样c:\he.xml 与之对应的在wince下 应该如何表示啊? ......,楼主是不是刚开始做CE方面的工作,在你的CE上一看就知道路径了啊,你自己设啊 ce下相对路径是一样的至于绝对路径我一般是通过GetModuleFileName程序路径然后在设置成需要的路径 我试过,按照ce下的路径 填到程序里,可是在那个文件夹下 没有看到我想要的xml,那个函数在pc下就能够生成xml,所以我怀疑是移植到ce下路径出了问题啊 void CContactDlg::OnBnClickedBu0(){ MSXML2::IXMLDOMDocumentPtr pDoc; MSXML2::IXMLDOMElementPtr xmlRoot ; //创建DOMDocument对象 HRESULT hr= pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); //if(!SUCCEEDED(hr)) //{ // MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"); //} //根节点的名称为china pDoc->raw_createElement((_bstr_t)(char*)"china", &xmlRoot); pDoc->raw_appendChild(xmlRoot, NULL); MSXML2::IXMLDOMElementPtr childNode ; pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode); childNode->Puttext("WuHan");//节点值 childNode->setAttribute("population","8,000,000");//属性名,属性值 childNode->setAttribute("area","10000"); xmlRoot->appendChild(childNode); pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode); childNode->Puttext("ShangHai"); childNode->setAttribute("population","12,000,000"); childNode->setAttribute("area","12000"); xmlRoot->appendChild(childNode); //保存到文件 //如果不存在就建立,存在就覆盖 pDoc->save("windows\\he.xml"); My_strIP('0');} 最近刚刚在Mobile上用了TinyXML,用起来很简单。不过CE是是Unicode编码,而TinyXML是用的UTF-8或是ANSI,使用的时候注意一下编码转换。实例的话网上一堆堆的,楼主自己Google+百度吧。 pDoc->save("windows\\he.xml");=================有一个问题你怎么调试的直接下载还是通过虚拟机你知道这个相对目录相对的是谁吗?还是建议你通过GetModuleFileName程序路径看看然后在根据这个绝对路径修改 串口先连开发板,下载到wince的啊嗯,我试试通过GetModuleFileName修改路径把 TCHAR modulePath[MAX_PATH];GetModuleFileName(NULL, modulePath, MAX_PATH);CString strModulePath(modulePath);strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('\\')));CString appPath = strModulePath;string seperator = "\\";string fullPath = appPath.GetBuffer(0) + seperator+fileName;myDocument->SaveFile(fullPath.c_str())为什么在倒第二行有错误error C2678: binary '+' : no operator found which takes a left-hand operand of type 'wchar_t *' (or there is no acceptable conversion)怎么调啊?; string seperator = "\\";============全都用CString 最后一个语句myDocument->SaveFile(fullPath.c_str())也会出错,cstring对象fullPath中没有c_str()函数 cstring对象fullPath中没有c_str()函数========CString中本来就没有c_str()c_str()是string的CString是MFC的string是stl不是一个东西所以我让你全都用CString 请问你知道如何将在wince下生成的xml文件在显示出来啊,应该调用什么函数啊?怎么用 我用dos那个界面显示出来了 但是有点小问题 帮我看看把void CContactDlg::OnBnClickedCallOnoff(){ static int onoff=SWITCH_ON; CString strIP; CComboBox *pCombo; CButton *pButton; switch(onoff) { case SWITCH_ON: pCombo=(CComboBox *)this->GetDlgItem(IDC_COMBO); pCombo->GetWindowTextW(strIP);//---------------------我想把此处获得的strip,传给下面xml中name元素的内容,并通过cout << NameElement1->FirstChild()->Value() 输出这段IP地址 ,可最后显示的只是一个字符 像1和2之类的,并没有显示出完整的IP地址啊 这是为什么啊? if(strIP.GetLength()<=0) { MessageBox(_T("destIP could not be NULL!")); return; } //...验证IP.......... this->m_destIP=strIP; //...启动通话......... for(int i=0;i<NUM_OF_HDR;i++) { this->m_Hdr[i].lpData=new char[SIZE_OF_BUFF]; this->m_Hdr[i].dwBufferLength=SIZE_OF_BUFF; this->m_Hdr[i].dwFlags=0; waveInPrepareHeader(m_hWaveIn,&m_Hdr[i],sizeof(WAVEHDR)); waveInAddBuffer(m_hWaveIn,&m_Hdr[i],sizeof(WAVEHDR)); } waveInStart(m_hWaveIn); pButton=(CButton*)this->GetDlgItem(IDC_CALL_ONOFF); pButton->SetWindowTextW(_T("End")); onoff=SWITCH_OFF; break; case SWITCH_OFF: //...结束通话..... for(int i=0;i<NUM_OF_HDR;i++) { waveInUnprepareHeader(m_hWaveIn,&m_Hdr[i],sizeof(WAVEHDR)); delete this->m_Hdr[i].lpData; } waveInStop(m_hWaveIn); pButton=(CButton*)this->GetDlgItem(IDC_CALL_ONOFF); pButton->SetWindowTextW(_T("Call")); onoff=SWITCH_ON; CString str=strIP; char* str1=(LPSTR)(LPCTSTR)(str); //创建一个XML的文档对象。 TiXmlDocument *myDocument = new TiXmlDocument(); //创建一个根元素并连接。 TiXmlElement *RootElement = new TiXmlElement("Persons"); myDocument->LinkEndChild(RootElement); //创建一个Person元素并连接。 TiXmlElement *PersonElement = new TiXmlElement("Person"); RootElement->LinkEndChild(PersonElement); //设置Person元素的属性。 PersonElement->SetAttribute("ID", "1"); //创建name元素并连接。 TiXmlElement *NameElement = new TiXmlElement("IpAddress"); PersonElement->LinkEndChild(NameElement); //设置name元素的内容并连接。 TiXmlText *NameContent = new TiXmlText(str1); NameElement->LinkEndChild(NameContent); myDocument->SaveFile(".//Call log.xml");//保存到文件 //加载xml myDocument->LoadFile(); //获得根元素,即Persons。 TiXmlElement *RootElement1 = myDocument->RootElement(); //获得第一个Person节点。 TiXmlElement *FirstPerson = RootElement->FirstChildElement(); //获得第一个Person的name节点和ID属性。 TiXmlElement *NameElement1 = FirstPerson->FirstChildElement(); TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute(); //输出根元素名称,即输出Persons。 cout << RootElement->Value() << endl; //输出第一个Person的ID属性。 cout << IDAttribute->Value()<< endl; //输出第一个Person的name内容,即IpAddress。 cout << NameElement1->FirstChild()->Value() << endl; break; }} 代码中间的注释//-------我想把此处获得的strip,传给下面xml中name元素的内容,并通过cout << NameElement1->FirstChild()->Value() 输出这段IP地址 ,可最后显示的只是一个字符 像1和2之类的,并没有显示出完整的IP地址啊 这是为什么啊? 你用的好像不是CMarkup我不太懂 开发网页插件,怎么实现图像裁剪功能 关于下载的动态库加载不上的问题 VC++小问题 怎么在非MFC类里调用控件? 散分求助,calcpassword 函数问题 请教高手:关于数据源的问题 十万火急!请教各位大侠,怎样用VC6读写数据库中的图片 如何将查询出的表中的记录数量返回给一个整型变量? 新手请教:怎样在Ado中调用一个用sql语句写的存储过程 多工程问题:如何在一个的工程文件中引用另外一个工程的成员函数 怎样发个消息给以启动的进程 帮帮我吧,我没分了!!
所以没有ce的例子
不过这个东西何在PC上没有分别
网上有很多例子
至于你说路径
不是特别明白你的意思
至于绝对路径
我一般是通过GetModuleFileName程序路径
然后在设置成需要的路径
{
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr xmlRoot ;
//创建DOMDocument对象
HRESULT hr= pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
//if(!SUCCEEDED(hr))
//{
// MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
//}
//根节点的名称为china
pDoc->raw_createElement((_bstr_t)(char*)"china", &xmlRoot);
pDoc->raw_appendChild(xmlRoot, NULL);
MSXML2::IXMLDOMElementPtr childNode ;
pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);
childNode->Puttext("WuHan");//节点值
childNode->setAttribute("population","8,000,000");//属性名,属性值
childNode->setAttribute("area","10000");
xmlRoot->appendChild(childNode);
pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);
childNode->Puttext("ShangHai");
childNode->setAttribute("population","12,000,000");
childNode->setAttribute("area","12000");
xmlRoot->appendChild(childNode);
//保存到文件
//如果不存在就建立,存在就覆盖
pDoc->save("windows\\he.xml");
My_strIP('0');
}
=================
有一个问题
你怎么调试的
直接下载还是通过虚拟机
你知道这个相对目录相对的是谁吗?
还是建议你通过GetModuleFileName程序路径看看
然后在根据这个绝对路径修改
嗯,我试试通过GetModuleFileName修改路径把
GetModuleFileName(NULL, modulePath, MAX_PATH);
CString strModulePath(modulePath);
strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('\\')));
CString appPath = strModulePath;
string seperator = "\\";
string fullPath = appPath.GetBuffer(0) + seperator+fileName;
myDocument->SaveFile(fullPath.c_str())
为什么在倒第二行有错误
error C2678: binary '+' : no operator found which takes a left-hand operand of type 'wchar_t *' (or there is no acceptable conversion)
怎么调啊?
;
============
全都用CString
也会出错,cstring对象fullPath中没有c_str()函数
========
CString中本来就没有c_str()
c_str()是string的
CString是MFC的
string是stl
不是一个东西
所以我让你全都用CString
如何将在wince下生成的xml文件在显示出来啊,应该调用什么函数啊?怎么用
void CContactDlg::OnBnClickedCallOnoff()
{ static int onoff=SWITCH_ON;
CString strIP;
CComboBox *pCombo;
CButton *pButton;
switch(onoff)
{
case SWITCH_ON:
pCombo=(CComboBox *)this->GetDlgItem(IDC_COMBO);
pCombo->GetWindowTextW(strIP);
//---------------------我想把此处获得的strip,传给下面xml中name元素的内容,并通过cout << NameElement1->FirstChild()->Value() 输出这段IP地址 ,可最后显示的只是一个字符 像1和2之类的,并没有显示出完整的IP地址啊 这是为什么啊?
if(strIP.GetLength()<=0)
{
MessageBox(_T("destIP could not be NULL!"));
return;
}
//...验证IP..........
this->m_destIP=strIP;
//...启动通话.........
for(int i=0;i<NUM_OF_HDR;i++)
{
this->m_Hdr[i].lpData=new char[SIZE_OF_BUFF];
this->m_Hdr[i].dwBufferLength=SIZE_OF_BUFF;
this->m_Hdr[i].dwFlags=0;
waveInPrepareHeader(m_hWaveIn,&m_Hdr[i],sizeof(WAVEHDR));
waveInAddBuffer(m_hWaveIn,&m_Hdr[i],sizeof(WAVEHDR));
}
waveInStart(m_hWaveIn); pButton=(CButton*)this->GetDlgItem(IDC_CALL_ONOFF);
pButton->SetWindowTextW(_T("End"));
onoff=SWITCH_OFF;
break;
case SWITCH_OFF:
//...结束通话.....
for(int i=0;i<NUM_OF_HDR;i++)
{
waveInUnprepareHeader(m_hWaveIn,&m_Hdr[i],sizeof(WAVEHDR));
delete this->m_Hdr[i].lpData;
}
waveInStop(m_hWaveIn);
pButton=(CButton*)this->GetDlgItem(IDC_CALL_ONOFF);
pButton->SetWindowTextW(_T("Call"));
onoff=SWITCH_ON;
CString str=strIP;
char* str1=(LPSTR)(LPCTSTR)(str);
//创建一个XML的文档对象。
TiXmlDocument *myDocument = new TiXmlDocument();
//创建一个根元素并连接。
TiXmlElement *RootElement = new TiXmlElement("Persons");
myDocument->LinkEndChild(RootElement);
//创建一个Person元素并连接。
TiXmlElement *PersonElement = new TiXmlElement("Person");
RootElement->LinkEndChild(PersonElement);
//设置Person元素的属性。
PersonElement->SetAttribute("ID", "1");
//创建name元素并连接。
TiXmlElement *NameElement = new TiXmlElement("IpAddress");
PersonElement->LinkEndChild(NameElement);
//设置name元素的内容并连接。
TiXmlText *NameContent = new TiXmlText(str1);
NameElement->LinkEndChild(NameContent);
myDocument->SaveFile(".//Call log.xml");//保存到文件
//加载xml
myDocument->LoadFile();
//获得根元素,即Persons。
TiXmlElement *RootElement1 = myDocument->RootElement();
//获得第一个Person节点。
TiXmlElement *FirstPerson = RootElement->FirstChildElement();
//获得第一个Person的name节点和ID属性。
TiXmlElement *NameElement1 = FirstPerson->FirstChildElement();
TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();
//输出根元素名称,即输出Persons。
cout << RootElement->Value() << endl;
//输出第一个Person的ID属性。
cout << IDAttribute->Value()<< endl;
//输出第一个Person的name内容,即IpAddress。
cout << NameElement1->FirstChild()->Value() << endl;
break;
}
}
//-------我想把此处获得的strip,传给下面xml中name元素的内容,并通过cout << NameElement1->FirstChild()->Value() 输出这段IP地址 ,可最后显示的只是一个字符 像1和2之类的,并没有显示出完整的IP地址啊 这是为什么啊?
我不太懂