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

MFC+D3D+ToolKitPro

MFC+D3D+ToolKitPro

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

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

這是測(cè)試項(xiàng)目,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ù)需一層一層遞進(jìn)
 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使用,屬臨時(shí)變量
 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>

用來測(cè)試的主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 閱讀(3191) 評(píng)論(6)  編輯 收藏 引用

評(píng)論

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

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

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

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

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

# re: 關(guān)于tinyXML庫的封裝---我寫的CXML類 2009-06-05 11:41 kroody
您好!
在使用tinyxml的時(shí)候碰到一個(gè)問題想請(qǐng)教下您, 像這種嵌套形式的 怎么讀? 比如我要讀第二組中的 index Value怎么實(shí)現(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>  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   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>
            国产日韩成人精品| 加勒比av一区二区| 一区二区日韩| 99视频一区二区三区| 欧美激情一区二区久久久| 亚洲免费高清| 亚洲一区二区精品在线观看| 国产精品久久久免费| 欧美影视一区| 久久精品人人做人人爽| 亚洲激情啪啪| 一区二区三区日韩欧美精品| 国产免费观看久久| 欧美成在线观看| 欧美极品一区| 欧美亚洲日本网站| 免费不卡视频| 亚洲一区二区高清| 久久精品91| 亚洲天堂av在线免费观看| 性欧美超级视频| 国产精品久久久久久超碰| 亚洲欧洲一区二区天堂久久 | 一区二区在线观看视频在线观看| 久久综合色婷婷| 欧美电影在线免费观看网站| 亚洲免费综合| 狂野欧美一区| 香港成人在线视频| 久久综合电影| 欧美一区高清| 欧美人与性动交cc0o| 久久国产福利国产秒拍| 中文一区二区在线观看| 亚洲黄色在线| 国产亚洲一区精品| 亚洲理伦在线| 亚洲福利小视频| 亚洲欧美日韩国产综合在线| 日韩一区二区电影网| 欧美一区二区视频在线| 亚洲一区综合| 欧美高清在线一区二区| 久久在线91| 国产日韩亚洲欧美精品| 99成人免费视频| 亚洲激情网站| 久久久青草青青国产亚洲免观| 亚洲在线视频一区| 欧美日韩mv| 亚洲国产99精品国自产| 国语自产精品视频在线看一大j8| 亚洲精品资源| 99视频在线观看一区三区| 免费观看30秒视频久久| 另类激情亚洲| 一区在线免费观看| 久久精品成人欧美大片古装| 久久大逼视频| 国产精品一区二区三区四区| 一区二区日本视频| 亚洲性感美女99在线| 欧美剧在线免费观看网站| 欧美电影资源| 亚洲肉体裸体xxxx137| 老司机免费视频久久| 麻豆精品在线视频| 尤物yw午夜国产精品视频明星| 欧美在线在线| 蜜臀91精品一区二区三区| 尤物99国产成人精品视频| 久久久亚洲综合| 欧美69视频| 日韩视频久久| 欧美午夜宅男影院在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲专区在线视频| 国产视频久久久久| 久久精品九九| 亚洲国产人成综合网站| 中文一区二区| 国产欧美一区二区三区久久人妖 | 午夜精品一区二区三区在线视| 亚洲免费在线视频一区 二区| 国产精品久久久久999| 亚洲欧美日韩一区在线观看| 久久综合电影一区| 亚洲免费高清| 国产日韩欧美三区| 久久青青草原一区二区| 亚洲精选91| 久久精品欧美日韩| 亚洲精品123区| 欧美午夜一区二区福利视频| 欧美一区二区日韩| 亚洲大片在线| 亚洲欧美日韩爽爽影院| 韩国v欧美v日本v亚洲v| 欧美日韩成人综合天天影院| 亚洲影视综合| 欧美激情1区2区3区| 亚洲影音一区| 亚洲欧洲日本专区| 国产精品试看| 欧美精品午夜视频| 久久精品色图| 一本色道久久综合| 免费成人性网站| 亚久久调教视频| 亚洲精品久久久蜜桃| 国产日韩欧美在线视频观看| 欧美激情在线免费观看| 欧美一区2区三区4区公司二百| 欧美国产日韩一区二区三区| 午夜在线电影亚洲一区| 最新日韩在线视频| 韩国精品久久久999| 国产精品夫妻自拍| 欧美日本在线播放| 久久日韩粉嫩一区二区三区| 亚洲一区二区三区高清| 亚洲日本电影| 亚洲大片一区二区三区| 久久天堂国产精品| 欧美一区视频| 亚洲欧美在线免费| 中文国产一区| 一区二区三区不卡视频在线观看 | 在线观看av不卡| 国产日韩欧美中文| 国产精品国产三级国产专播品爱网| 欧美国产精品久久| 久久综合色播五月| 久久亚洲私人国产精品va| 久久精品视频免费| 欧美一区二区三区另类| 欧美一区二区在线看| 亚洲影视在线播放| 亚洲自拍偷拍福利| 亚洲天堂视频在线观看| 一区二区三区www| 亚洲最新合集| 一本色道久久综合| 亚洲视频在线免费观看| 99精品欧美一区二区蜜桃免费| 亚洲大片在线| 亚洲精品国产系列| 亚洲精品综合精品自拍| 日韩一级二级三级| 一区二区三区视频观看| 亚洲天堂黄色| 久久成人精品电影| 久久久精品免费视频| 久色成人在线| 欧美日本精品一区二区三区| 欧美日韩午夜视频在线观看| 欧美婷婷在线| 国产人成精品一区二区三| 激情六月综合| 亚洲精品乱码视频| 夜夜嗨av一区二区三区| 亚洲一区精品在线| 午夜精品久久久久| 久久福利资源站| 欧美不卡一区| 亚洲麻豆av| 性色av一区二区三区| 久久亚洲综合色| 欧美日韩国产电影| 国产日韩精品电影| 亚洲黄色小视频| 亚洲天堂网站在线观看视频| 久久成年人视频| 亚洲成人中文| 亚洲欧美日韩国产中文 | 一本高清dvd不卡在线观看| 亚洲综合久久久久| 久久一区中文字幕| 国产精品v欧美精品v日韩| 激情亚洲网站| 亚洲影视综合| 欧美大片第1页| 亚洲小少妇裸体bbw| 巨乳诱惑日韩免费av| 国产精品久久影院| 在线成人av网站| 午夜一区不卡| 亚洲黄色成人网| 久久国产一区二区| 国产精品va在线播放| 亚洲国产精品成人| 久久高清免费观看| 一本色道久久综合亚洲精品不| 久久爱www.| 国产精品久久久久毛片大屁完整版 | 亚洲午夜精品| 欧美激情影音先锋| 久久精品国产亚洲a| 国产精品成人av性教育| 最新国产拍偷乱拍精品|