UTF-8编码的XML数据另类装入

 UTF-8编码的XML数据另类装入

Author:zfive5(zidong)
Email:zfive5@yahoo.com.cn

这些日子忙的不可开交,一周加三天的班,周末也在编写东西,但发现人在忙的时候才可以学到东西,这篇文章的内容就是分析xml数据时得到的,大家都知道用msxml装入xml数据有两种方法,一种就是load文件,当然了这种很简单,但需要一个文件做介质,但如果xml数据是网络传过来的话,先生成文件再load一下分析,最后再删除,总觉得有些别扭,那么只有第二种loadXML了,但这个需要一个BSTR类型的参数,传什么呢?服务器传过来的是utf-8格式的数据呀!
 
经过实验,终于找到了以下的方法,源码说明一切
 
Xml编码的文件:
 
 <<?xml version="1.0" encoding="utf-8" ?>< main>zzz</main>
二进制数据如图:
VC分析程序:
 
FILE *pfile1=NULL;
pfile1=fopen("C://1.xml","rb");
if(pfile1==NULL)
{
    return;
}
 
char szbuftemp[8*1024+32];
memset(szbuftemp,0,sizeof(szbuftemp));
fread(szbuftemp,1,sizeof(szbuftemp),pfile1);
fclose(pfile1);
   
//UTF-8文件需要跳过前三个标志符 ,UNICODE 需要如下的
//WCHAR *p=(WCHAR *)&szbuftemp[2];当前2是为了跳过unicode的标志符
char *p=(char *)&szbuftemp[3];
 
char   szbuf[100];
::CoInitialize(NULL);
{
    MSXML2::IXMLDOMDocumentPtr docPtr;
    MSXML2::IXMLDOMNodeListPtr oNodeList;
    MSXML2::IXMLDOMNodePtr oNode;
long icount=0;
 
    try
    {
         docPtr.CreateInstance(__uuidof(MSXML2::DOMDocument));
         docPtr->loadXML(_bstr_t(p));
         oNodeList=docPtr->selectNodes(L"/main");
         icount=oNodeList->length;
         AfxMessageBox(itoa(icount,szbuf,10));
         oNodeList=NULL;
         docPtr=NULL;
    }
    catch(...)
    {
            
    }
    }
::CoUninitialize();
return;
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值