读XML文件到内存操作的问题。请问如何读XML文件到内存操作加载成功
我想把XML文件读到一个内存中操作,pXMLDoc->loadXML(pBufferRead)
可是总不成功。
if(! pXMLDoc->load("F:\\jsp1\\rau\\src\\init\\initxiyu.xml"))  这样加载是成功的
请问如何读XML文件到内存操作加载成功
CString spath ;
int ilen =0;
 spath ="F:\\jsp1\\rau\\src\\init\\initxiyu.xml";
CFile fFileRead(spath,CFile::modeReadWrite  | CFile::modeNoTruncate ); 
ilen = fFileRead.GetLength();
char *pBufferRead = new char[ilen  ];  
ZeroMemory(pBufferRead,ilen);
memset(pBufferRead,'0',ilen);
fFileRead.Read(pBufferRead,ilen  );
fFileRead.Close();MSXML2::IXMLDOMDocumentPtr pXMLDoc; 
::CoInitialize(NULL); 
HRESULT hr; 
hr =pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); 
//加载文件 
//if(! pXMLDoc->load("F:\\jsp1\\rau\\src\\init\\initxiyu.xml"))  //这样成功
if(! pXMLDoc->loadXML(pBufferRead))  //不成功
{
   AfxMessageBox("加载文件不成功"); }
 AfxMessageBox("成功");
delete [] pBufferRead ;

解决方案 »

  1.   

    先创建处理指令, 特别是encoding部分要指定正确, 如果你的initxiyu.xml是unicode格式, 改成encoding="unicode"
    IXMLDOMDocument::CreateProcessingInstruction(_T("xml"), _T("version=\"1.0\" encoding=\"utf-8\""));
    然后,再执行:
    IXMLDOMDocument::LoadXML(pBufferRead)注意, pBufferRead要转换成BSTR类型, 用CString::AllocSysString比较方便,For more information about OLE allocation functions in Windows, see::SysAllocString and::SysFreeString in the Win32 SDK OLE Programmer’s Reference.
      

  2.   

    //不成功
    CString sxml;
    //sxml= pBufferRead  ;
     //sxml = sxml.Left(ilen) ;
    //if(! pXMLDoc->loadXML(sxml.AllocSysString()))//不成功
     //if(! pXMLDoc->loadXML(pBufferRead))//不成功
     //BSTR b=_com_util::ConvertStringToBSTR(pBufferRead);
      //if(! pXMLDoc->loadXML(b))if(! pXMLDoc->load("F:\\jsp1\\rau\\src\\init\\initxiyu.xml"))  //这样成功 不用这样的方法
    {
       AfxMessageBox("加载文件不成功"); }
     AfxMessageBox("成功");
    delete [] pBufferRead ;可我想把读XML文件到内存操作加载成功
    下面是改了几次的XML文件都是不成功的加载到内存。
    //不成功<?xml version="1.0" ?>
    <application>
    <menu>
    <title>系统维护</title>
    </menu>
    </application>
    //不成功<?xml version="1.0" encoding="unicode" ?>
    <application>
    <menu>
    <title>系统维护</title>
    </menu>
    </application>
      

  3.   

     sxml.Format("%s",pBufferRead);
     sxml = sxml.Mid(3,ilen-3);
    这样就好了不知为什么有3个没用的字符?
      

  4.   

    很有可能是UTF-8的文件头指示0xEF,0XBB,0XBF, 按我前面说的,先创建处理指令, 设置encoding="utf-8"