• <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>

            MFC+D3D+ToolKitPro

            MFC+D3D+ToolKitPro

            C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
              3 Posts :: 0 Stories :: 9 Comments :: 0 Trackbacks

            由于最近寫工具要使用xml來存儲腳本,所以看了一些xml的c++相關(guān)內(nèi)容
            網(wǎng)上好多關(guān)于tinyxml的文檔看了好多總是覺得比較麻煩,所以決定自己寫一個類來封裝它
            這個類封裝的不是很全面,但已經(jīng)基本夠我使用了,有興趣的朋友可以再繼續(xù)完善他,
            讓不懂xml內(nèi)部原理的朋友們也可以方便使用xml格式文件存儲數(shù)據(jù)

            這是測試項目,vc71版本,我喜歡用2003,哈哈
            /Files/hwawai/CXML_vc71.7z
            如果大家有什么更好的代碼來處理xml希望踴躍交流

            頭文件
            #pragma once
            #include<string>
            #include "tinyxml.h"
            using namespace std;
            class CXML
            {
            public:
             CXML(void);
             ~CXML(void);
             
             bool ParseXmlFile(const char* xmlFile);
             TiXmlElement* GetElement(const char* parentTitle,const char* title);//此函數(shù)需一層一層遞進
             bool getElementAttributeValue(TiXmlElement* Element,const char* AttributeName,string& reslut);
             bool getFirstElementValue(const char* title,string& result);
             bool getNextElementValue(const char* title,string& result);
             TiXmlElement* getRootElement();
             void Clear();
             //////////////////////////////////////////////////////////////////////////
             TiXmlElement* addXmlRootElement(const char* title);
             TiXmlElement* addXmlChildElement(TiXmlElement* pElement,const char* title);
             void addXmlAttribute(TiXmlElement* pElement,const char* name,const char* value);
             void addXmlDeclaration(const char* vesion="1.0",const char* encoding="gb2312",const char* standalone="");
             void addElementValue(TiXmlElement* pElement,const char* value);
             void addXmlComment(TiXmlElement* pElement,const char* Comment);
             void saveFile(const char* file);
            protected:
             TiXmlDocument m_xml;
             TiXmlElement* pElement;   // 獲取NextElementValue使用,屬臨時變量
             TiXmlElement* getFirstElement(const char* ElementMark,TiXmlElement* pcrElement);
            };

            源文件
            #include "StdAfx.h"
            #include ".\xml.h"

            CXML::CXML(void)
            {
            }

            CXML::~CXML(void)
            {
            }

            bool CXML::ParseXmlFile(const char* xmlFile)
            {
             return m_xml.LoadFile(xmlFile)?1:0;
            }

            TiXmlElement* CXML::GetElement(const char* parentTitle,const char* title)
            {
             TiXmlNode* _=m_xml.FirstChildElement(parentTitle);
             for(_=_->FirstChild();_;_=_->NextSibling())
             {
              if (!strcmp(title,_->Value()))
              {
               return _->ToElement();
              }
             }
             return 0;
            }

            bool CXML::getElementAttributeValue(TiXmlElement* Element,const char* AttributeName,string& reslut)
            {
             if(Element->Attribute(AttributeName))
             {
              reslut=Element->Attribute(AttributeName);
              return 1;
             }
             return 0;
            }

            bool CXML::getFirstElementValue(const char* title,string& result)
            {
             if(!title)
              return 0;
             TiXmlElement* _(0);
             _=m_xml.RootElement();
             _=getFirstElement(title,_);
             if(_)
             {
              pElement=_;
              result=pElement->GetText();
              return 1;
             }
             return 0;
            }

            bool CXML::getNextElementValue(const char* title,string& result)
            {
             result="";
             pElement=pElement->NextSiblingElement(title);
             if(pElement)
             {
              result=pElement->GetText();
              return 1;
             }
             return 0;
            }

            TiXmlElement* CXML::getRootElement()
            {
             return m_xml.RootElement();
            }

            void CXML::Clear()
            {
             m_xml.Clear();
            }

            //////////////////////////////////////////////////////////////////////////
            TiXmlElement* CXML::addXmlRootElement(const char* title)
            {
             TiXmlElement* _=new TiXmlElement(title);
             m_xml.LinkEndChild(_);
             return _;
            }

            TiXmlElement* CXML::addXmlChildElement(TiXmlElement* pElement,const char* title)
            {
             if(pElement)
             {
              TiXmlElement* _=new TiXmlElement(title);
              pElement->LinkEndChild(_);
              return _;
             }
             return 0;
            }

            void CXML::addXmlAttribute(TiXmlElement* pElement,const char* name,const char* value)
            {
             if(pElement)
             {
              pElement->SetAttribute(name,value);
             }
            }

            void CXML::addXmlDeclaration(const char* vesion,const char* encoding,const char* standalone)
            {
             TiXmlDeclaration *_=new TiXmlDeclaration(vesion,encoding,standalone);
             m_xml.LinkEndChild(_);
            }

            void CXML::addElementValue(TiXmlElement *pElement,const char* value)
            {
             if(pElement)
             {
              TiXmlText *_=new TiXmlText(value);
              pElement->LinkEndChild(_);
             }
            }
             
            void CXML::addXmlComment(TiXmlElement* pElement,const char* Comment)
            {
             if(pElement)
             {
              TiXmlComment *_=new TiXmlComment(Comment);
              pElement->LinkEndChild(_);
             }
            }

            void CXML::saveFile(const char* file)
            {
             m_xml.SaveFile(file);
            }

            //////////////////////////////////////////////////////////////////////////
            TiXmlElement* CXML::getFirstElement(const char* ElementMark,TiXmlElement* pcrElement)
            {
             TiXmlElement* _=pcrElement; 
             while(_)
             {
              if(strcmp(_->Value(),ElementMark)==0)
              {
               //printf("%s\r\n",pElementtmp->Value());
               return _;
              }
              else
              {
               TiXmlElement* nextElement=_->FirstChildElement();
               while(nextElement)
               {
                //printf("%s\r\n",nextElement->Value());
                if(strcmp(nextElement->Value(),ElementMark)==0)
                {
                 return nextElement;
                }
                else
                {
                 TiXmlElement* reElement=NULL;
                 reElement=getFirstElement(ElementMark,nextElement);
                 if(reElement)
                 {
                  return reElement;
                 }
                }
                nextElement=nextElement->NextSiblingElement();
               }
              }
              _=_->NextSiblingElement();
             }
             return NULL;
            }


            stdafx文件
            #pragma once
            #include <iostream>
            #include <tchar.h>

            用來測試的主cpp文件
            #include "stdafx.h"
            #include "tinyxml//XML.h"
            #include <iostream>

            void createXML()
            {
             CXML xml;
             xml.addXmlDeclaration("1.0","gb2312","");
             TiXmlElement* root=xml.addXmlRootElement("fields");
             TiXmlElement* pElement=xml.addXmlChildElement(root,"pos");
             xml.addXmlAttribute(pElement,"x","100");
             xml.addXmlAttribute(pElement,"y","200.1");
             xml.addXmlAttribute(pElement,"z","0.123");

             TiXmlElement* pElement2=xml.addXmlChildElement(root,"dest");
             xml.addXmlAttribute(pElement2,"x","一二三");
             xml.addXmlAttribute(pElement2,"y","一二");
             xml.addXmlAttribute(pElement2,"z","一");
             xml.saveFile("1.xml");
            }

            void CreateXML1()
            {
             CXML xml;
             xml.addXmlDeclaration();
                TiXmlElement* root=xml.addXmlRootElement("fields");
             xml.addXmlComment(root,"AAAAAAA");
             TiXmlElement* pElement=xml.addXmlChildElement(root,"pos_x");
             xml.addElementValue(pElement,"1.3");
             pElement=xml.addXmlChildElement(root,"pos_x");
             xml.addElementValue(pElement,"30.1");
             pElement=xml.addXmlChildElement(root,"pos_x");
             xml.addElementValue(pElement,"30ssss.1");
             xml.saveFile("2.xml");
            }


            void LoadXML()
            {
             CXML xml;
             xml.ParseXmlFile("1.xml");
             string a;
             TiXmlElement* pElement=xml.GetElement("fields","dest");
               xml.getElementAttributeValue(pElement,"x",a);
              cout<<a<<endl;
              xml.getElementAttributeValue(pElement,"y",a);
              cout<<a<<endl;
              xml.getElementAttributeValue(pElement,"z",a);
              cout<<a<<endl;
            }

            void LoadXML1()
            {
             CXML xml;
             xml.ParseXmlFile("2.xml");
             string a;
             xml.getFirstElementValue("pos_x",a);
             cout<<a<<endl;
             xml.getNextElementValue("pos_x",a);
              cout<<a<<endl;
             xml.getNextElementValue("pos_x",a);
             cout<<a<<endl;
            }

            int _tmain(int argc, _TCHAR* argv[])
            {
            //  createXML();
            //  LoadXML(); 
              CreateXML1();
              LoadXML1(); 
             getchar();
             return 0;
            }


            生成的xml文件
            1.xml
            <?xml version="1.0" encoding="gb2312" ?>
            <fields>
                <pos x="100" y="200.1" z="0.123" />
                <dest x="一二三" y="一二" z="一" />
            </fields>

            2.xml
            <?xml version="1.0" encoding="gb2312" ?>
            <fields>
                <!--AAAAAAA-->
                <pos_x>1.3</pos_x>
                <pos_x>30.1</pos_x>
                <pos_x>30ssss.1</pos_x>
            </fields>

            posted on 2008-08-21 15:45 hwawai 閱讀(3138) 評論(6)  編輯 收藏 引用

            評論

            # re: 關(guān)于tinyXML庫的封裝---我寫的CXML類 2008-08-21 17:56 Condor
            暈,不是有老外寫過tinyxml for C++的了嘛?  回復  更多評論
              

            # re: 關(guān)于tinyXML庫的封裝---我寫的CXML類 2008-08-21 19:25 沈臻豪(foxtail)
            這年頭大家都喜歡自己封裝 呵呵  回復  更多評論
              

            # re: 關(guān)于tinyXML庫的封裝---我寫的CXML類 2008-08-21 20:10 cexer
            tinyxml對中文的支持太別扭了。  回復  更多評論
              

            # re: 關(guān)于tinyXML庫的封裝---我寫的CXML類 2008-08-22 00:33 theanswerzju
            ... 你封裝的越多 可控的粒度就越粗了 像你這樣為tinyXML再次封裝明顯沒有什么意義  回復  更多評論
              

            # re: 關(guān)于tinyXML庫的封裝---我寫的CXML類 2008-08-24 15:46 戴爾筆記本
            xml格式文件存儲數(shù)據(jù)倒沒問題,但代碼讀起來還是挺費勁。
              回復  更多評論
              

            # re: 關(guān)于tinyXML庫的封裝---我寫的CXML類 2009-06-05 11:41 kroody
            您好!
            在使用tinyxml的時候碰到一個問題想請教下您, 像這種嵌套形式的 怎么讀? 比如我要讀第二組中的 index Value怎么實現(xiàn)呢?
            假如我事先不知道有多少層呢? 遞歸來做么?
            hedybest#163.com

            非常感謝!
            <?xml version="1.0" ?>
            <xmlRoot>
            <aaa>
            <Count>50</Count>
            <Desc>dog</Desc>
            <Item>
            <Index>1111</Index>
            <Value>222</Value>
            </Item>
            <Items0>
            <Index>-858993460</Index>
            <Value>-107374176.000000</Value>
            </Items0>
            <Items1>
            <Index>-858993460</Index>
            <Value>-107374176.000000</Value>
            </Items1>
            <Items2>
            <Index>-858993460</Index>
            <Value>-107374176.000000</Value>
            </Items2>
            <Items3>
            <Index>-858993460</Index>
            <Value>-107374176.000000</Value>
            </Items3>
            </aaa>
            </xmlRoot>  回復  更多評論
              

            青青青伊人色综合久久| 久久综合九色综合网站| 久久无码精品一区二区三区| 中文精品久久久久国产网址| 综合久久精品色| 国产精品美女久久久m| 国产精品日韩欧美久久综合| 久久久久久精品免费看SSS| 久久久久亚洲Av无码专| 日韩精品无码久久一区二区三| 国内精品久久久久影院日本| 欧美国产成人久久精品| 久久99国产精品一区二区| 一本色道久久综合| 国产高潮国产高潮久久久91 | 中文字幕亚洲综合久久| 中文字幕精品久久久久人妻| 久久99精品国产99久久| 久久中文骚妇内射| 亚洲国产成人精品91久久久 | 久久综合九色综合97_久久久| 国产精品久久久久蜜芽| 欧美精品一区二区久久| 国产精品99久久精品爆乳| 91精品国产综合久久婷婷| 亚洲愉拍99热成人精品热久久 | 国产精品久久久久久久久| 欧美伊人久久大香线蕉综合| 久久人人爽人人澡人人高潮AV| 久久精品国内一区二区三区| 国内精品久久久久影院优| 久久亚洲精精品中文字幕| 怡红院日本一道日本久久 | 97久久香蕉国产线看观看| 久久精品国产2020| 久久精品国产乱子伦| 久久人人爽人人爽人人片AV麻烦| 伊人久久亚洲综合影院| 综合人妻久久一区二区精品| 久久香蕉超碰97国产精品| 国产V亚洲V天堂无码久久久|