请问如何在WinCE下实现xml文件的读写?能具体点吗?给个实例也好
但是要用MFC编写
有用的话,给分  邮箱[email protected]

解决方案 »

  1.   

    能给个tinyxml能用的实例吗?我找到些 但是运行就有错误 谢啦
      

  2.   

    哦,能给个能用的实例吗? 还有路径该如何设置?像\\he.xml这样的吗?在哪个目录下可以找到啊?我不太懂
      

  3.   

    我现在不做mobile了
    所以没有ce的例子
    不过这个东西何在PC上没有分别
    网上有很多例子
    至于你说路径
    不是特别明白你的意思
      

  4.   

    我说的路径就是用cup创建一个xml文档时需要把这个xml存在什么位置吗?就像存在PC的C盘根目录 就应该这样c:\he.xml 与之对应的在wince下 应该如何表示啊?
      

  5.   

    ......,楼主是不是刚开始做CE方面的工作,在你的CE上一看就知道路径了啊,你自己设啊
      

  6.   

    ce下相对路径是一样的
    至于绝对路径
    我一般是通过GetModuleFileName程序路径
    然后在设置成需要的路径
      

  7.   

    我试过,按照ce下的路径 填到程序里,可是在那个文件夹下 没有看到我想要的xml,那个函数在pc下就能够生成xml,所以我怀疑是移植到ce下路径出了问题啊
      

  8.   

    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');
    }
      

  9.   

    最近刚刚在Mobile上用了TinyXML,用起来很简单。不过CE是是Unicode编码,而TinyXML是用的UTF-8或是ANSI,使用的时候注意一下编码转换。实例的话网上一堆堆的,楼主自己Google+百度吧。
      

  10.   

    pDoc->save("windows\\he.xml");
    =================
    有一个问题
    你怎么调试的
    直接下载还是通过虚拟机
    你知道这个相对目录相对的是谁吗?
    还是建议你通过GetModuleFileName程序路径看看
    然后在根据这个绝对路径修改
      

  11.   

    串口先连开发板,下载到wince的啊
    嗯,我试试通过GetModuleFileName修改路径把
      

  12.   

    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)
    怎么调啊?
    ;
      

  13.   

    string seperator = "\\";
    ============
    全都用CString
      

  14.   

    最后一个语句myDocument->SaveFile(fullPath.c_str())
    也会出错,cstring对象fullPath中没有c_str()函数
      

  15.   

    cstring对象fullPath中没有c_str()函数
    ========
    CString中本来就没有c_str()
    c_str()是string的
    CString是MFC的
    string是stl
    不是一个东西
    所以我让你全都用CString
      

  16.   

    请问你知道
    如何将在wince下生成的xml文件在显示出来啊,应该调用什么函数啊?怎么用
      

  17.   

    我用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;
    }
    }
      

  18.   

    代码中间的注释
    //-------我想把此处获得的strip,传给下面xml中name元素的内容,并通过cout << NameElement1->FirstChild()->Value() 输出这段IP地址 ,可最后显示的只是一个字符 像1和2之类的,并没有显示出完整的IP地址啊 这是为什么啊?
      

  19.   

    你用的好像不是CMarkup
    我不太懂