亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

Linux 下讀XML 的類詳解及實現代碼

2024-09-01 13:50:56
字體:
來源:轉載
供稿:網友

 Linux 下讀XML 的類詳解及實現代碼

在Linux下寫程序,常需要讀一些配置文件?,F有的XML工具很多,可以方便的編輯和生成XML。

但VC中用的XML解析器在Linux下不能用。只好自已寫了個。用了一下,還不錯。

 #include <stdio.h>#include <stdlib.h>// ********************************************************************** //// XML解析類(honghaier寫于2008-11-19)// ********************************************************************** //struct SXMLAttrib{ char mKeyName[100]; //鍵名 char mValue[100]; //鍵值}; struct SXMLFrame{public: char mFrameName[100]; //幀名 int  mAttrNum;  //屬性數量 SXMLAttrib* mAttrArray;  //屬性數組 SXMLFrame* mpSiblFrame; //兄弟結點 SXMLFrame* mpChiFrame;  //子結點 SXMLFrame* mpParentFrame; //父結點public: SXMLFrame(); ~SXMLFrame(); void Release_Depath(); SXMLFrame* GetFrame_Depth(char *szFrameName); int  GetChildNum(); SXMLFrame* GetChildFrame(int Index); SXMLFrame* GetChildFrame(char *szFrameName); SXMLFrame* GetSiblFrame(); SXMLFrame* GetParentFrame(); SXMLAttrib* GetAttrib(char *szKeyName);  bool ParseAttrString(char *szXMLString);};class CXMLFile{ SXMLFrame mRoot; SXMLFrame* mpCurrentFrame; bool mbDepthClose; //閉合private: bool ParseFrameString(char *szXMLString);public: int pFile; CXMLFile(); ~CXMLFile(); void Close(); void Release(); bool Open( const char * pFileName);  SXMLFrame* GetRoot(); SXMLFrame* GetFrame_Depth(char *szFrameName); }; //====================================================SXMLFrame::SXMLFrame(){ memset(mFrameName,0,sizeof(mFrameName)); mAttrNum = 0; mAttrArray = NULL; mpSiblFrame = NULL; mpChiFrame = NULL; mpParentFrame = NULL;}SXMLFrame::~SXMLFrame(){ Release_Depath();}void SXMLFrame::Release_Depath(){ if(mAttrNum > 0) { if(mAttrArray) {  delete[] mAttrArray;  mAttrArray = NULL;  } mAttrNum = 0; } if(mpChiFrame) { mpChiFrame->Release_Depath(); delete mpChiFrame; mpChiFrame = NULL; } if(mpSiblFrame) { mpSiblFrame->Release_Depath(); delete mpSiblFrame; mpSiblFrame = NULL; }}SXMLFrame* SXMLFrame::GetFrame_Depth(char *szFrameName){ if(strcmp(mFrameName,szFrameName)==0) { return this; } if(mpChiFrame) { SXMLFrame* tResFrame = mpChiFrame->GetFrame_Depth(szFrameName); if(tResFrame)return tResFrame; } if(mpSiblFrame) { SXMLFrame* tResFrame = mpSiblFrame->GetFrame_Depth(szFrameName); if(tResFrame)return tResFrame; } return NULL;}int SXMLFrame::GetChildNum(){ int count = 0; for(SXMLFrame *temp = mpChiFrame ; temp != NULL ;temp = temp->mpSiblFrame) { count++; } return count;}SXMLFrame* SXMLFrame::GetChildFrame(int Index){ int count = 0; for(SXMLFrame *temp = mpChiFrame ; temp != NULL ;temp = temp->mpSiblFrame) { if(count == Index)return temp; count++; }  return NULL;}SXMLFrame* SXMLFrame::GetChildFrame(char *szFrameName){ for(SXMLFrame *temp = mpChiFrame ; temp != NULL ;temp = temp->mpSiblFrame) { if(strcmp(temp->mFrameName,szFrameName)==0) {  return temp; } } return NULL;}SXMLFrame* SXMLFrame::GetSiblFrame(){ return mpSiblFrame;}SXMLFrame* SXMLFrame::GetParentFrame(){ return mpParentFrame;}SXMLAttrib* SXMLFrame::GetAttrib(char *szKeyName){ for(int i = 0 ; i < mAttrNum ; i++) { if(strcmp(mAttrArray[i].mKeyName,szKeyName)==0) {  return &mAttrArray[i]; } } return NULL;}bool SXMLFrame::ParseAttrString(char *szXMLString){ SXMLAttrib AttribArray[100]; int len = strlen(szXMLString); mAttrNum = 0; int StrPos = 0; bool HaveFrameName = false; for(int i = 0 ;i < len ; i++) { if(i==(len-1)) {  if(false == HaveFrameName)  {  memcpy(mFrameName,szXMLString,len);  mFrameName[len]='/0';  HaveFrameName = true;  }  else  {  if(( len - StrPos-1 )== 0)  {   memset(AttribArray[mAttrNum].mValue,0,sizeof(AttribArray[mAttrNum].mValue));  }  else  {   memcpy(AttribArray[mAttrNum].mValue,szXMLString+StrPos,len-StrPos-1);   AttribArray[mAttrNum].mValue[len-StrPos-1]='/0';  }  mAttrNum++;  StrPos = 0;  }  break; } if(szXMLString[i] == ' '&&szXMLString[i-1] == ' ') {  StrPos = i+1;  continue; } if(szXMLString[i] == ' ') {  if(false == HaveFrameName)  {  memcpy(mFrameName,szXMLString,i);  mFrameName[i]='/0';  HaveFrameName = true;  StrPos = i+1;  continue;  }  else  {  if(( i - StrPos-1 )== 0)  {   memset(AttribArray[mAttrNum].mValue,0,sizeof(AttribArray[mAttrNum].mValue));  }  else  {   memcpy(AttribArray[mAttrNum].mValue,szXMLString+StrPos,i-StrPos-1);   AttribArray[mAttrNum].mValue[i-StrPos-1]='/0';  }  mAttrNum++;  StrPos = i+1;  continue;   } } if(szXMLString[i] == '=') {  memcpy(AttribArray[mAttrNum].mKeyName,szXMLString+StrPos,i-StrPos);  AttribArray[mAttrNum].mKeyName[i-StrPos]='/0';  i++;//跳過一個"""  StrPos = i+1;  continue; } } mAttrArray = new SXMLAttrib[mAttrNum]; if(!mAttrArray)return false; memcpy(mAttrArray,AttribArray,mAttrNum*sizeof(SXMLAttrib)); return true;}CXMLFile::CXMLFile(){ pFile = 0; mpCurrentFrame = NULL; mbDepthClose = false;}CXMLFile::~CXMLFile(){ Close();}void CXMLFile::Close(){ if( pFile>0) { int error = close( pFile); if( error!=0) {  perror("close file failed"); }else {  pFile=-1; } Release(); }}void CXMLFile::Release(){ mRoot.Release_Depath();}bool CXMLFile::Open( const char * pFileName){ pFile =0; pFile = open( pFileName,O_RDONLY); if( pFile==-1) { perror(pFileName); return false; } int num = 0; char buffer; bool bReadXMLString = false; int XMLStringNum = 0; char XMLString[1024]; while(num = read(pFile,&buffer,1)>0) { if(buffer =='<') {  bReadXMLString = true;  XMLStringNum = 0;  continue; } if(buffer == '>') {  XMLString[XMLStringNum]='/0';  if( false == ParseFrameString(XMLString))  {  printf("Read XML error: %s /n",XMLString);  return false;  }    bReadXMLString = false;  continue; } if(true == bReadXMLString) {  XMLString[XMLStringNum++] = buffer; } } mpCurrentFrame = NULL; mbDepthClose = true; return true;}SXMLFrame* CXMLFile::GetRoot(){ return &mRoot;}SXMLFrame* CXMLFile::GetFrame_Depth(char *szFrameName){ return mRoot.GetFrame_Depth(szFrameName);}bool CXMLFile::ParseFrameString(char *szXMLString){ if(szXMLString[0] == '?')return true; if(szXMLString[0] == '!')return true; if(szXMLString[0] == '/') { //如果是結束 mpCurrentFrame = mpCurrentFrame->GetParentFrame(); mbDepthClose = true; } else { mbDepthClose = false; if( NULL == mpCurrentFrame) {  mpCurrentFrame = &mRoot; } SXMLFrame* tNewFrame = new SXMLFrame; tNewFrame->ParseAttrString(szXMLString);  if(false == mbDepthClose) {  tNewFrame->mpParentFrame = mpCurrentFrame;  if( NULL == mpCurrentFrame->mpChiFrame)  {  mpCurrentFrame->mpChiFrame = tNewFrame;  }  else  {  for(SXMLFrame *temp = mpCurrentFrame->mpChiFrame ; temp != NULL ;temp = temp->mpSiblFrame)  {   if( NULL == temp->mpSiblFrame)   {   temp->mpSiblFrame = tNewFrame;   break;   }  }  }  mpCurrentFrame = tNewFrame; } else {  tNewFrame->mpParentFrame = mpCurrentFrame->GetParentFrame();  mpCurrentFrame->mpSiblFrame = tNewFrame;  mpCurrentFrame = tNewFrame; } } return true;}

 用XML工具做了一個簡單的XML文件。

 <?xml version="1.0" encoding="UTF-8"?><!-- edited with XML Explorer v2.0 by Mergesoft (www.mergesoft.com)--><root> <Honghaier Name="紅孩兒" Age="26"></Honghaier></root>  

在C++代碼中

可以這樣使用

CXMLFile  xmlfile;xmlfile.Open("1.xml");SXMLFrame* mRootFrame = CXMLFile::GetRoot();int ChildNum = mRootFrame ->GetChildNum(); for(int i = 0 ; i < ChildNum ; i++){     SXMLFrame* tChileFrame = mRootFrame ->GetChildFrame (i);    SXMLAttrib* tAttrib = tChileFrame->GetAttrib("Age");    print("%s : %s= %s /n",mChileFrame ->mFrameName,tAttrib->mKeyName,tAttrib->mValue);}

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲性猛交xxxxwww| 亚洲一区二区三区久久| 国产日韩欧美在线观看| 久久91亚洲人成电影网站| 精品一区二区亚洲| 久久久久久久91| 欧美日韩亚洲视频一区| 北条麻妃一区二区三区中文字幕| 欧美激情在线播放| 国产精品人人做人人爽| 欧美激情网友自拍| 久久精视频免费在线久久完整在线看| 一本色道久久88精品综合| 一区二区三区 在线观看视| 久久777国产线看观看精品| 国产一区二区欧美日韩| 亚洲第一精品夜夜躁人人爽| 国产人妖伪娘一区91| 伦理中文字幕亚洲| 欧美贵妇videos办公室| 国内精品小视频在线观看| 91九色国产在线| 久久久精品2019中文字幕神马| 亚洲国产中文字幕久久网| 久久福利视频网| 国产精品综合不卡av| 久久国产精品亚洲| 精品视频久久久| 韩国视频理论视频久久| 在线成人激情视频| 奇米四色中文综合久久| 97超级碰在线看视频免费在线看| 国产精品自产拍在线观| 日韩在线观看高清| 全球成人中文在线| 日韩国产欧美精品一区二区三区| 亚洲精品影视在线观看| 国产999精品久久久影片官网| 久久精品国产成人| 情事1991在线| 午夜免费在线观看精品视频| 日韩av电影在线播放| 精品高清美女精品国产区| 欧美亚洲国产日韩2020| 国产精品自在线| 久久综合伊人77777蜜臀| 久久男人av资源网站| 国产精品揄拍500视频| 国产精品成人一区| 欧美乱妇40p| 97精品在线视频| 国产不卡av在线| 中文字幕亚洲欧美在线| 伊人伊成久久人综合网站| 韩国v欧美v日本v亚洲| 欧美裸体xxxxx| 色偷偷91综合久久噜噜| 97视频在线免费观看| 欧美日韩一区免费| 自拍偷拍亚洲区| 亚洲欧洲日产国码av系列天堂| 精品国产视频在线| 亚洲电影免费观看高清| 日韩一区二区三区国产| 欧美怡春院一区二区三区| 国产成人鲁鲁免费视频a| 国产91免费看片| 国产精品精品久久久| 97碰在线观看| 欧美日韩一区二区在线播放| 欧美性xxxxx| 国产一区二区三区在线视频| 亚洲色图第一页| 久久91精品国产| 亚洲精品综合精品自拍| 插插插亚洲综合网| 久久乐国产精品| 日韩美女福利视频| 精品国产福利视频| 一区二区亚洲精品国产| …久久精品99久久香蕉国产| 久久99精品久久久久久琪琪| 亚洲成人激情在线| 亚洲成色999久久网站| 97精品国产97久久久久久春色| 久久久久久久电影一区| 91亚洲国产成人精品性色| 亚洲色图50p| 亚洲国产高清福利视频| 欧美成人激情视频| 欧美在线观看一区二区三区| 亚洲天堂av综合网| 欧美日韩国产999| 91精品国产色综合久久不卡98口| 亚洲美女动态图120秒| 亚洲xxxx妇黄裸体| 久久成人精品电影| 91亚洲人电影| 在线日韩欧美视频| 色婷婷综合成人| 成人免费视频网| 欧美日韩精品在线播放| 亚洲亚裔videos黑人hd| 亚洲韩国日本中文字幕| 久久久国产精品一区| 日韩欧美在线网址| 欧美电影免费播放| 欧美性猛xxx| 欧美激情按摩在线| 久久久久久欧美| 欧美极品少妇xxxxx| 红桃av永久久久| 色青青草原桃花久久综合| 久久久久久久久国产精品| 海角国产乱辈乱精品视频| 亚洲视频在线观看网站| 亚洲欧美日韩中文在线| 亚洲一区二区日本| 日韩一区二区三区国产| 97在线精品视频| 欧美另类高清videos| 全亚洲最色的网站在线观看| 久久视频在线免费观看| 国产精品精品一区二区三区午夜版| 国产成人综合久久| 欧美激情乱人伦| 色噜噜狠狠狠综合曰曰曰88av| 国产精品久久久久久久久久ktv| 精品国内自产拍在线观看| 亚洲精品一区二区网址| 91在线观看欧美日韩| 欧美日韩国产限制| 国产精品扒开腿做| 亚洲自拍另类欧美丝袜| 国产日韩在线免费| 中文字幕日韩在线播放| 亚洲综合大片69999| 9.1国产丝袜在线观看| 亚洲日本中文字幕| 4k岛国日韩精品**专区| 亚洲免费电影在线观看| 不卡av电影在线观看| 91在线无精精品一区二区| 国产精品久久久久久久久久久久久久| 欧美午夜性色大片在线观看| 国内精品久久久久久久| 热久久这里只有| 狠狠久久五月精品中文字幕| 欧美孕妇性xx| 日韩av免费一区| 亚洲变态欧美另类捆绑| 国产精品影片在线观看| 日韩精品中文字幕久久臀| 日韩亚洲在线观看| 亚洲精品日韩欧美| 亚洲日本中文字幕免费在线不卡| 亚洲第一精品福利| 精品久久久久久中文字幕| 91av在线网站| 亚洲精品国产精品国自产在线| 免费成人高清视频| 美女福利精品视频| 国产福利精品av综合导导航| 国产欧美日韩丝袜精品一区|