青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

游戲編程

常用鏈接

統計

最新評論

自己花了一個通宵寫的XML讀寫類

 

/*
*XMLFile.h
*/

#ifndef XMLFILE_H_H
#define XMLFILE_H_H
/*
* 實現類似xml的簡單文件存儲格式
* 處理的文件必須格式完全正確

*/


#include 
<fstream>
#include 
<string>


using namespace std;


class CXMLFileAttribute
{
public:
    
string mName;
    
string mValue;
    CXMLFileAttribute
*    mNextAttribute;


public:
    CXMLFileAttribute()
{mNextAttribute = NULL;}
    CXMLFileAttribute
* GetNextAttri(){return mNextAttribute;}
    
//解析
    char* GetNameInfoFromChars(char* p);
    
char* GetValueInfoFromChars(char* p);
    
char* GetAttriInfoFromChars(char* p);
    
//取值
    void    SaveFile(ofstream *file);
}
;

class CXMLFileNode
{
public:
    CXMLFileNode
*        mParent;
    CXMLFileNode
*        mFirstChild;
    CXMLFileNode
*        mNextSibling;
    
string                mValue;
    
string                mSign;
    CXMLFileAttribute
*    mAttribute;


public:
    
char* GetValue();
    
char* GetName();
    CXMLFileNode();
    CXMLFileNode
* GetNextSibling(){return mNextSibling;}
    CXMLFileNode
* GetLastChild();
    CXMLFileAttribute
* GetLastAttri();

    
//解析
    char* GetSignFromChars(char* p);
    
char* GetValueFromChars(char* p);
    
char* GetAttriFromChars(char* p);
    
char* GetNodeInfoFromChars(char* p);
    
char* GetChildrenInfoFromChars(char* p);
    
//~解析
    void    SaveFile(ofstream *file ,int depth);
}
;



class CXMLFile
{
public:
    CXMLFileNode
*    mRootNode;
    
char*            mData;
public:

    
void ReadFile(char* filename);
    
void SaveFile(char* filename);
}
;

#endif


/*
*XMLFile.cpp
*/

#include 
"XMLFile.h"

char* SkipWhiteSpace(char* p)
{
    
if ( !|| !*p )
        
return 0;
    
while ( *&& *== ' '|| *== '\n' || *=='\r' || *=='\t' || *p<0 )
            
++p;
    
while(!*p)
        
++p;
    
return p;
}


char* CXMLFileAttribute::GetNameInfoFromChars(char* p)
{
    p 
= SkipWhiteSpace( p );
    
if ( !|| !*p ) 
        
return 0;
    
while (p && *&& *p!= '=')
    
{
        mName.push_back( 
*p);
        p
++;
    }

    
return p;
}


char* CXMLFileAttribute::GetValueInfoFromChars(char* p)
{
    p 
= SkipWhiteSpace( p);
    
if ( !|| !*p ) 
        
return 0;
    p
++//跳過 =
    p++;//跳過 “
    while (p && *&& *p!='"')
    
{
        mValue.push_back( 
*p);
        p
++;
    }

    p
++//跳過 ”
    return p;
}


char* CXMLFileAttribute::GetAttriInfoFromChars(char* p)
{
    p 
= SkipWhiteSpace( p);
    
if ( !|| !*p ) 
        
return 0;
    p 
= GetNameInfoFromChars(p);
    p 
= GetValueInfoFromChars(p);
    
return p;
}


void CXMLFileAttribute::SaveFile(ofstream* file)
{
    
*file<<mName<< "="<< "\""<<mValue<<"\"";
}


//CXMLFileNode

CXMLFileNode::CXMLFileNode()
{
    mSign.clear();
    mValue.clear();
    mParent 
= NULL;
    mAttribute 
= NULL;
    mFirstChild 
= NULL;
    mNextSibling 
= NULL;
}


CXMLFileNode
* CXMLFileNode::GetLastChild()
{
    CXMLFileNode
* node = mFirstChild;
    
while(node && node->GetNextSibling())
        node 
= node->GetNextSibling(); 
    
return node;
}


char* CXMLFileNode::GetSignFromChars(char* p)
{
    p 
= SkipWhiteSpace( p);
    p
++;//越過‘<’
    if ( !|| !*p ) 
        
return 0;
    
while (p && *&& *p!='>' && *!= ' ' )
    
{
        mSign.push_back( 
*p);
        p
++;
    }

    
return p;
}


char* CXMLFileNode::GetValueFromChars(char* p)
{
    p 
= SkipWhiteSpace( p);
    
if ( !|| !*p ) 
        
return 0;
    p
++//跳過 >
    if ( !|| !*p )
        
return 0;
    p 
= SkipWhiteSpace( p);
    
while (p && *&& *p!='<')
    
{
        mValue.push_back( 
*p );
        p
++;
    }

    
return p;
}


char* CXMLFileNode::GetAttriFromChars(char* p)
{
    p 
= SkipWhiteSpace( p);
        
if ( !|| !*p ) 
            
return 0;
    
if(*== '>' )
        
return p;
    CXMLFileAttribute
* attri;
    
while(*!='>')
    
{
        
if(!mAttribute)
        
{
            mAttribute 
= new CXMLFileAttribute();
            p 
= mAttribute->GetAttriInfoFromChars(p);
        }

        
else
        
{
            attri 
=mAttribute;
            
while(attri && attri->GetNextAttri())
                attri 
= attri->GetNextAttri();
            attri
->mNextAttribute = new CXMLFileAttribute();
            p 
= attri->mNextAttribute->GetAttriInfoFromChars(p);
        }

        
        p 
= SkipWhiteSpace( p);
        
if ( !|| !*p ) 
            
return 0;
    }

    
return p;
}

char* CXMLFileNode::GetNodeInfoFromChars(char* p)
{
    p 
= GetSignFromChars(p);
    p 
= GetAttriFromChars(p);
    p 
= GetValueFromChars(p);
    p 
= SkipWhiteSpace( p);
    
if ( !|| !*p ) 
        
return 0;
    
char* p1 = p;
    CXMLFileNode
* node = this;
    
if(*p1 == '<' && *(++p1) == '/' )
    
{
        
while(*== '<' && *p1 == '/' )
        
{
            
while(*!= '>')
                p
++;
            p 
= SkipWhiteSpace(p);
            p
++;//越過>
            p =SkipWhiteSpace(p);
            
            
if ( !|| !*p ) 
                
return 0;
            node 
= node->mParent;
            p1 
= p + 1;
        }

        CXMLFileNode
* nodeBrothor = node;
        node 
= node->mFirstChild;
        
while(node && node->mNextSibling)
            node 
= node->mNextSibling;
        p 
= SkipWhiteSpace(p);
        
if ( !|| !*p ) 
            
return 0;
        node
->mNextSibling = new CXMLFileNode();
        node
->mNextSibling->mParent = nodeBrothor;
        
return node->mNextSibling->GetNodeInfoFromChars(p);
    }

    
else
    
{
        
while(*!= '<')
            p
++;
        p 
= GetChildrenInfoFromChars(p);
    }

    
return p;
}


char* CXMLFileNode::GetChildrenInfoFromChars(char* p)
{
    mFirstChild 
= new CXMLFileNode();
    mFirstChild
->mParent = this;
    
return mFirstChild->GetNodeInfoFromChars(p);
}


void CXMLFileNode::SaveFile(ofstream* file ,int depth)
{
    
int i;
    
for ( i=0; i<depth; i++ ) 
        
*file<<"    ";

    
*file<<"<"<<mSign.c_str();

    CXMLFileAttribute
* attrib;
    
for ( attrib = mAttribute; attrib; attrib = attrib->GetNextAttri())
    
{
        
*file<< " ";
        attrib
->SaveFile( file);
    }


    
*file<< ">";
    
*file<<mValue.c_str();
    
if(mFirstChild)        
        
*file<< "\n";

    
for ( CXMLFileNode* chileNnode = mFirstChild; chileNnode; chileNnode=chileNnode->mNextSibling)
    
{
        chileNnode
->SaveFile(file, depth+1 );
        
if(chileNnode->mNextSibling)
            
*file<<"\n";
    }



    
if(mFirstChild)
    
{
        
*file<<"\n";
        
for( i=0; i<depth; ++i ) 
            
*file<<"    ";
        
*file<< "</"<<mSign.c_str()<< ">";
    }

    
else
    
{
        
*file<< "</"<<mSign.c_str()<< ">";
    }

    
}


//CXMLFile

void CXMLFile::ReadFile(char* filename)
{
    ifstream file(filename,ifstream::binary);
    
long length = 0;

    length 
= file.tellg();
    
    file.seekg(
0,ios::end);
    length 
= file.tellg();

    
if ( length <= 0 )
        
return;
    mData 
= new char[ length+1 ];
    file.seekg( 
0, ios::beg );
    file.read( mData, length);
    mData[length] 
= 0;
    mRootNode 
= new CXMLFileNode();
    mRootNode
->GetNodeInfoFromChars(mData);
}


void CXMLFile::SaveFile(char* filename)
{
    ofstream file(filename);
    mRootNode
->SaveFile( &file, 0 );
}

posted on 2009-03-02 06:52 Arcadia-er 閱讀(254) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区日韩| 午夜精品久久久久久99热软件| 国产精品sm| 欧美激情欧美激情在线五月| 欧美丝袜一区二区| 欧美激情久久久久久| 国产午夜精品久久久久久免费视| 日韩视频中文| 亚洲激情在线观看视频免费| 欧美伊人久久大香线蕉综合69| 亚洲欧美日韩在线播放| 欧美日韩极品在线观看一区| 亚洲国产精品久久人人爱蜜臀| 国内精品免费在线观看| 校园春色国产精品| 亚洲欧美变态国产另类| 欧美私人网站| 一区二区三区四区五区精品视频| 99精品免费网| 欧美激情免费观看| 亚洲欧洲精品一区二区| 亚洲激情视频| 欧美大片在线看| 欧美电影免费网站| 亚洲国产日韩欧美在线图片| 久久久999成人| 牛牛影视久久网| 国产一区日韩一区| 久久成人免费电影| 久久一区二区视频| 在线观看欧美日韩国产| 久久免费一区| 亚洲人成免费| 亚洲一区二区三区视频| 国产精品成人一区| 亚洲欧美成人综合| 久久三级视频| 亚洲美女性视频| 欧美日韩视频在线| 亚洲在线不卡| 久久久999| 在线观看欧美成人| 欧美丰满高潮xxxx喷水动漫| 亚洲国产精品123| 99国产精品久久久久老师| 欧美精品一区二区三区久久久竹菊 | 免费久久久一本精品久久区| 亚洲第一搞黄网站| 宅男噜噜噜66一区二区| 国产精品视频九色porn| 久久精品国产久精国产一老狼| 免费亚洲电影在线观看| 久久国产精品一区二区| 欧美freesex交免费视频| 最新日韩在线| 国产酒店精品激情| 久久久精彩视频| 亚洲人成网站精品片在线观看| 亚洲欧美日韩在线综合| 黑丝一区二区三区| 欧美日韩免费高清| 久久99在线观看| 亚洲人成人一区二区三区| 亚洲欧美三级伦理| 亚洲欧洲一区二区在线播放| 国产精品久久久一区麻豆最新章节 | 亚洲人成网站精品片在线观看 | 亚洲小说欧美另类婷婷| 国产欧美日韩一区二区三区| 女同一区二区| 欧美一区二区三区免费观看| 亚洲国产婷婷综合在线精品 | 午夜一区不卡| 亚洲精品免费在线| 久久久久久穴| 午夜日韩电影| 一本色道久久88综合日韩精品| 国内精品视频在线观看| 欧美视频在线观看 亚洲欧| 美女国内精品自产拍在线播放| 亚洲一区二区综合| 亚洲日本成人女熟在线观看| 可以免费看不卡的av网站| 亚洲一区二区av电影| 亚洲国产美女久久久久| 国产午夜精品视频免费不卡69堂| 欧美激情第六页| 久久午夜电影| 久久精品夜色噜噜亚洲a∨| 亚洲婷婷综合久久一本伊一区| 亚洲国产三级网| 欧美粗暴jizz性欧美20| 性做久久久久久| 最新日韩av| 亚洲国产婷婷综合在线精品| 国产一区二区三区久久久| 国产精品欧美一区二区三区奶水| 欧美日韩国产色视频| 欧美激情第3页| 欧美黄色aaaa| 美腿丝袜亚洲色图| 久久综合伊人77777| 久久精品国产清自在天天线| 午夜精品一区二区三区在线| 亚洲一区二区视频在线观看| 亚洲一区区二区| 亚洲午夜小视频| 亚洲尤物在线| 翔田千里一区二区| 午夜精品婷婷| 欧美一区二区三区喷汁尤物| 性久久久久久| 欧美一区二区视频观看视频| 欧美一区二区三区喷汁尤物| 性色av一区二区三区红粉影视| 欧美一区二区三区在线观看| 欧美在线视频一区| 久久av免费一区| 久久久久久久久一区二区| 久久躁狠狠躁夜夜爽| 欧美1区免费| 欧美日韩免费观看一区=区三区| 欧美三级免费| 国产亚洲观看| 亚洲国产日韩欧美| 一区二区免费在线观看| 亚洲欧美激情在线视频| 欧美影院一区| 欧美激情bt| 日韩视频在线一区| 先锋资源久久| 欧美承认网站| 国产精品私拍pans大尺度在线| 国产一区二区精品| 亚洲精品免费电影| 亚洲欧美成人| 欧美成人免费在线观看| 99国产一区| 久久激情五月激情| 欧美精品系列| 狠狠色狠狠色综合人人| 亚洲精品在线免费| 久久成人羞羞网站| 亚洲电影av| 亚洲影院污污.| 免费国产一区二区| 国产精品美女久久久久av超清 | 久久精品国产综合| 欧美国产精品va在线观看| 国产精品日韩在线| 在线看片成人| 欧美一区激情| 日韩午夜在线视频| 久久欧美肥婆一二区| 国产精品日韩精品| 亚洲精品1区2区| 久久久久国产精品一区三寸| 亚洲精品资源| 久久中文久久字幕| 国产欧美一区二区精品忘忧草| 亚洲精品社区| 久久一区激情| 亚洲欧美在线视频观看| 欧美激情国产日韩精品一区18| 国产午夜精品美女视频明星a级| 中文精品视频一区二区在线观看| 久久婷婷成人综合色| 亚洲天堂成人| 欧美日韩免费观看一区三区| 亚洲欧洲日本专区| 久久免费视频观看| 亚洲欧美一区二区原创| 欧美日韩 国产精品| 亚洲高清在线观看| 久久精品在线| 香蕉久久夜色| 国产欧美日韩不卡| 午夜精品久久久久99热蜜桃导演| 亚洲另类在线视频| 欧美激情一区二区三区蜜桃视频 | 久久久精品一品道一区| 亚洲在线观看| 国产精品专区第二| 午夜精品久久久久久久蜜桃app | 国产网站欧美日韩免费精品在线观看| 中国成人在线视频| 91久久久久久国产精品| 欧美粗暴jizz性欧美20| 91久久精品视频| 亚洲国产精品精华液网站| 欧美bbbxxxxx| 亚洲精品偷拍| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲视频在线观看免费| 亚洲日本久久| 欧美区国产区| 亚洲午夜高清视频| 亚洲视频一起| 国产欧美一区二区三区国产幕精品| 午夜精品婷婷|