void test_ReadXml_rapidxml()
{
string strTime = CTime::GetCurrentTime().Format("%H:%M:%S");
cout<<"开始时间:"<<strTime<<endl;
long nS(0),nM(0),nE(0);
nS = clock();
file<> * xmlfile = new file<>("D:\\osm\\data\\Tokyo.osm\\Tokyo.osm");
const char * pszD = xmlfile->data();
xml_document<> doc;
doc.parse<0>(xmlfile->data());
xml_node<> *pRoot = doc.first_node();
xml_node<> * pNode = pRoot->first_node();
int i(0),j(0);
nM = clock();
while ( pNode ){
string strName = pNode->name();
//pNode->first_node()
xml_node<> * pChildNode = pNode->first_node();
while (pChildNode){
pChildNode = pChildNode->next_sibling();
++i;
}
pNode = pNode->next_sibling();
++j;
}
nE = clock();
delete xmlfile;
xmlfile = 0;
string strEndTime = CTime::GetCurrentTime().Format("%H:%M:%S");
cout<<i<<endl;
cout<<j<<endl;
cout<<"总行数:"<<i+j<<endl;
printf("总用时:%ld毫秒\n",nE-nS);
printf("加载文件用时:%ld毫秒\n",nM-nS);
printf("遍历耗时:%ld毫秒\n",nE-nM);
cout<<"结束时间:"<<strEndTime<<endl;
}
void test_ReadXml_CMarkup()
{
long nS(0),nM(0),nE(0);
nS = clock();
CMarkup *pMark = new CMarkup;
if ( 0 == pMark ) { return;}
const char * pszPath = "D:\\osm\\data\\Tokyo.osm\\Tokyo.osm";
if ( !pMark->Load(pszPath) ){
return;
}
pMark->ResetPos();
bool bFind = pMark->FindElem();
pMark->IntoElem();
bFind = pMark->FindElem();
nM = clock();
int i(0),j(0);
while ( bFind ){
CString strName = pMark->GetTagName();
bool bChild = pMark->FindChildElem();
pMark->IntoElem();
while ( bChild ){
CString strTag = pMark->GetTagName();
bChild = pMark->FindElem();
++i;
}
pMark->OutOfElem();
++j;
bFind = pMark->FindElem();
}
nE = clock();
delete pMark;
pMark = 0;
cout<<i<<endl;
cout<<j<<endl;
cout<<"总行数"<<i+j<<endl;
printf("总用时:%ld毫秒\n",nE-nS);
printf("加载文件用时:%ld毫秒\n",nM-nS);
printf("遍历耗时:%ld毫秒\n",nE-nM);
}
不知道怎么上传图片,所以运行结果没贴图,总之读取一个150MB的xml文件的结果是:用rapidxml库读取的速度要比CMarkup要快的多,至于内存什么的倒没仔细测,用TinyXml读取不了上百兆的xml文件,其他的库没有用