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

游戲編程

常用鏈接

統計

最新評論

自己花了一個通宵寫的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 閱讀(251) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲国产欧美另类丝袜| 亚洲欧美偷拍卡通变态| 一区二区三区不卡视频在线观看| 亚洲国产aⅴ天堂久久| 久久亚洲欧美| 久久人人97超碰精品888| 久久久人成影片一区二区三区观看| 久久精品av麻豆的观看方式| 久久视频一区| 亚洲日本激情| 精品成人一区二区| 欧美一区二区三区免费观看视频| 欧美精品久久久久a| 久久久久久电影| 亚洲国产成人久久综合一区| 久久在线免费观看| 亚洲免费观看高清完整版在线观看熊 | 狠狠v欧美v日韩v亚洲ⅴ| 欧美在线1区| 久久成年人视频| 亚洲精品之草原avav久久| 激情综合激情| 亚洲永久免费精品| 一区二区电影免费观看| 久久综合九色综合网站| 免费黄网站欧美| 亚洲欧美日韩视频一区| 在线欧美影院| 99热这里只有成人精品国产| 亚洲国产另类精品专区 | 久久久久久电影| 欧美人在线观看| 午夜精品久久久久久久白皮肤| 欧美暴力喷水在线| 国产精品久久久久一区二区| 国产亚洲综合在线| 久久久久久久久久码影片| 亚洲激情成人| 国产亚洲欧美一区二区三区| **欧美日韩vr在线| 久久久人成影片一区二区三区| 老司机凹凸av亚洲导航| 欧美成年人网站| 亚洲精品久久在线| 久久久久久久尹人综合网亚洲 | 亚洲成人在线网| 久久亚洲影院| 亚洲国产一区二区三区a毛片| 一区二区三区欧美在线| 欧美日韩成人综合| 宅男噜噜噜66一区二区66| 亚洲欧美日韩一区| 国产精品v欧美精品∨日韩| 99视频有精品| 亚洲国产高清aⅴ视频| 99精品免费网| 美女精品视频一区| 国产精品九九久久久久久久| 一区二区三区四区五区视频| 亚洲午夜av电影| 亚洲大胆女人| 国产亚洲福利| 欧美一区二区性| 久久久综合免费视频| 亚洲视频在线观看免费| 午夜激情久久久| 久久久国产成人精品| 久久久视频精品| 欧美亚洲日本一区| 亚洲欧美日韩国产精品| 国产精品久久二区| 欧美国产日韩视频| 久久九九免费| 久久蜜臀精品av| 日韩图片一区| 欧美成ee人免费视频| 久久婷婷国产综合精品青草| 亚洲国产精品高清久久久| 韩日在线一区| 亚洲欧美不卡| 国产女主播一区二区| 亚洲视频电影在线| 午夜精品一区二区三区在线| 亚洲精品中文字幕女同| 亚洲狼人精品一区二区三区| 久久蜜臀精品av| 欧美1区3d| 新狼窝色av性久久久久久| 久久久亚洲国产天美传媒修理工 | 欧美一级网站| 亚洲午夜电影| 国产精品久久久久久久9999| 亚洲欧美成人| 亚洲电影av| 一色屋精品亚洲香蕉网站| 欧美精品在线一区二区三区| 国产欧美精品xxxx另类| 在线中文字幕不卡| 久久人人九九| 欧美专区在线观看| 欧美一级片一区| 久久精品亚洲一区| 一区二区三区高清在线观看| 亚洲制服av| 亚洲第一页中文字幕| 亚洲激情在线观看| 国产欧美日韩专区发布| 国产精品区一区| 夜夜嗨av一区二区三区| 99精品国产在热久久| 国产主播一区二区三区| 国产精品一区二区久久精品 | 久久精品国产精品亚洲综合| 欧美一区二区三区婷婷月色| 亚洲视频在线观看三级| 日韩天天综合| 久久成年人视频| 亚洲一区二区视频| 欧美国产免费| 午夜老司机精品| 久久精彩视频| 亚洲精品久久久久中文字幕欢迎你| 欧美激情无毛| 欧美日韩黄色一区二区| 亚欧成人在线| 噜噜噜在线观看免费视频日韩| 免费欧美高清视频| 欧美午夜视频在线观看| 99视频一区二区三区| 欧美日韩国产va另类| 亚洲免费一区二区| 亚洲深爱激情| 久久视频国产精品免费视频在线 | 亚洲资源av| 亚洲福利国产精品| 亚洲一区二区高清视频| 国产精品国色综合久久| 亚洲国产一区二区三区在线播 | 欧美激情第10页| 亚洲综合欧美| 欧美日韩aaaaa| 中文在线一区| 亚洲视频在线观看| 激情婷婷久久| 亚洲日本成人女熟在线观看| 午夜视黄欧洲亚洲| 亚洲精品日韩在线观看| 免费在线国产精品| 亚洲黄色有码视频| 亚洲一区免费网站| 在线不卡a资源高清| 欧美电影在线播放| 久久综合伊人77777尤物| 伊人久久婷婷| 91久久精品美女高潮| 国产目拍亚洲精品99久久精品| 久久精品女人的天堂av| 99国产精品久久| 91久久久亚洲精品| 久久久久久香蕉网| 亚洲综合激情| 鲁大师影院一区二区三区| 另类综合日韩欧美亚洲| 亚洲午夜精品视频| 亚洲国产毛片完整版 | 精品av久久久久电影| 亚洲专区免费| 老司机精品久久| 老鸭窝毛片一区二区三区| 国产精品qvod| 亚洲片区在线| 亚洲欧美一级二级三级| 久久人人97超碰国产公开结果| 亚洲激情专区| 国产精品乱码久久久久久| 亚洲日本中文字幕免费在线不卡| 狠狠色综合色综合网络| 久久精品视频导航| 国产精品久久看| 亚洲一级一区| 国产噜噜噜噜噜久久久久久久久| 亚洲毛片一区二区| 亚洲欧美综合一区| 国产精品入口福利| 亚洲午夜一区| 久久婷婷影院| 欧美午夜剧场| 久久亚洲一区二区三区四区| 91久久精品美女| 亚洲视频免费在线| 国产真实精品久久二三区| 久久国产精品第一页| 一本色道88久久加勒比精品 | 欧美不卡高清| 亚洲午夜三级在线| 久久在精品线影院精品国产| 亚洲激情专区| 亚洲国产精品电影| 亚洲作爱视频|