从内存中读XML文件,该如何处理
从内存中读XML文件
参考 http://w.xue163.com/html/200871/673243.html
CString spath,sxml;
int ilen =0;
spath ="BitComet.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();
sxml.Format("%s",pBufferRead);
sxml = sxml.Mid(3,ilen-3);
CoInitialize(NULL) ;
xml::IXMLDOMDocumentPtr pDoc ;
xml::IXMLDOMElementPtr pElem ;
xml::IXMLDOMNodePtr pNode ;
xml::IXMLDOMNodeListPtr pNodeList ;
HRESULT hr = pDoc.CreateInstance(__uuidof(xml::DOMDocument)) ; //创建文档对象
if(!SUCCEEDED(hr))
{
cout<<"无法创建DM对象!"<<endl ;
return 0 ;
}
VARIANT_BOOL bFlag;
//IXMLDOMDocument::CreateProcessingInstruction(_T("xml"), _T("version=\"1.0\" encoding=\"utf-8\""));
bFlag = pDoc->load(pBufferRead) ; //load xml文件
if(bFlag == S_FALSE)
{
cout<<"打开BitComet.xml出错!"<<endl ;
return 0 ;
}
hr = pDoc->get_documentElement(&pElem) ; //获取根结点
if(pElem == NULL)
{
cout<<"获取根结点失败!"<<endl ;
return 0 ;
}
读取根结点失败了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<?xml version="1.0" encoding="UTF-8" ?>
<Licence_Service>
<Version_1>
<Version>1.0.0</Version>
</Version_1>
<SeriesNo_1>
<SeriesNo>TH123456</SeriesNo>
</SeriesNo_1>
<BeginTime_1>
<BeginTime>2010-03-16</BeginTime>
</BeginTime_1>
<EndTime_1>
<EndTime>2010-03-28</EndTime>
</EndTime_1>
<Declare_1>
<Declare>中国音乐集体管理组织与天合文化集团有限公司</Declare>
</Declare_1>
<DeFind_1>
<DeFind>中文申明</DeFind>
</DeFind_1>
<OverTime_1>
<OverTime>2010-03-25</OverTime>
</OverTime_1>
<DontPlay_1>
<DontPlay>Y</DontPlay>
</DontPlay_1>
</Licence_Service>
------解决方案--------------------
pDoc->CreateProcessingInstruction(_T("xml"), _T("version=\"1.0\" encoding=\"utf-8\""));
------解决方案--------------------
帮顶,学习了。。。。。。
------解决方案--------------------
请使用UNICODE串,不要使用char*
------解决方案--------------------
IXMLDOMDocument有两个方法,load和loadxml,load参数是文件名,loadxml参数是字符串缓冲区或是CString也行。
参考 http://w.xue163.com/html/200871/673243.html
CString spath,sxml;
int ilen =0;
spath ="BitComet.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();
sxml.Format("%s",pBufferRead);
sxml = sxml.Mid(3,ilen-3);
CoInitialize(NULL) ;
xml::IXMLDOMDocumentPtr pDoc ;
xml::IXMLDOMElementPtr pElem ;
xml::IXMLDOMNodePtr pNode ;
xml::IXMLDOMNodeListPtr pNodeList ;
HRESULT hr = pDoc.CreateInstance(__uuidof(xml::DOMDocument)) ; //创建文档对象
if(!SUCCEEDED(hr))
{
cout<<"无法创建DM对象!"<<endl ;
return 0 ;
}
VARIANT_BOOL bFlag;
//IXMLDOMDocument::CreateProcessingInstruction(_T("xml"), _T("version=\"1.0\" encoding=\"utf-8\""));
bFlag = pDoc->load(pBufferRead) ; //load xml文件
if(bFlag == S_FALSE)
{
cout<<"打开BitComet.xml出错!"<<endl ;
return 0 ;
}
hr = pDoc->get_documentElement(&pElem) ; //获取根结点
if(pElem == NULL)
{
cout<<"获取根结点失败!"<<endl ;
return 0 ;
}
读取根结点失败了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<?xml version="1.0" encoding="UTF-8" ?>
<Licence_Service>
<Version_1>
<Version>1.0.0</Version>
</Version_1>
<SeriesNo_1>
<SeriesNo>TH123456</SeriesNo>
</SeriesNo_1>
<BeginTime_1>
<BeginTime>2010-03-16</BeginTime>
</BeginTime_1>
<EndTime_1>
<EndTime>2010-03-28</EndTime>
</EndTime_1>
<Declare_1>
<Declare>中国音乐集体管理组织与天合文化集团有限公司</Declare>
</Declare_1>
<DeFind_1>
<DeFind>中文申明</DeFind>
</DeFind_1>
<OverTime_1>
<OverTime>2010-03-25</OverTime>
</OverTime_1>
<DontPlay_1>
<DontPlay>Y</DontPlay>
</DontPlay_1>
</Licence_Service>
------解决方案--------------------
pDoc->CreateProcessingInstruction(_T("xml"), _T("version=\"1.0\" encoding=\"utf-8\""));
------解决方案--------------------
帮顶,学习了。。。。。。
------解决方案--------------------
请使用UNICODE串,不要使用char*
------解决方案--------------------
IXMLDOMDocument有两个方法,load和loadxml,load参数是文件名,loadxml参数是字符串缓冲区或是CString也行。