最
近在準備給自己的GUI系統加入XML解析部分,就開始研究Tinyxml,差了不少資料,看了網友的例題還有Tinyxml本身自帶的范例程序。得到了
很大的啟發,得之余民而用之于民,我整理了一下簡單的入門程序給大家,想必大家看完這兩種調用方式就會用Tinyxml了。
就不說廢話了,直接看程序:
兩種不同的代碼原因是對應不同的XML格式。我們先看第一種格式的XML文件(Tinyxml自帶例題)
------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<document>
<English name="MY" value="UTF32">The world has many languages</English>
<Button name="OK_btn" x = "20" y = "77">OK</Button>
</document>
-------------------------------------------------------------------------------------------------------------------------
#include "..\Tinyxml\tinyxml.h"
#include <iostream>
#include <string>
int main(void)
{
TiXmlDocument doc( "test2.xml");
doc.LoadFile();
TiXmlHandle docH( &doc );
TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Button" ).Element();
std::cout<<"<"<<element->Value()<<">"<<std::endl;
std::cout<<" name = "<<element->Attribute( "name" )<<std::endl;
std::cout<<" x = "<< element->Attribute( "x" )<<std::endl;
std::cout<<" y = "<< element->Attribute( "y" )<<std::endl;
std::cout<<" Text = "<<element->GetText()<<std::endl;
getchar();
return 0;
}
這些代碼我想已經很清楚了,所有的元素的值都會打印在屏幕上,如下:
<Button>
name = OK_btn
x = 20
y = 77
Text = OK
這里的element 指針就是當前我們操作的指針,通過docH.FirstChildElement( "document"
).FirstChildElement( "Button"
).Element();方法我們獲取了要尋找的Button這個元素的指針,然后它的元素就可以通過element->Attribute(
"name" );element->Attribute( "x" )來得到了,使用非常方便。
Tinyxml中還有另外一種查找元素的方式,其對應的XML格式也是不同的,這種格式如下(以下直接借用了網友的例子):
<?xml version="1.0" encoding="UTF-8"?> <persons> <student> <stu_name>hami</stu_name> <stu_age>15</stu_age> <stu_sex>男</stu_sex> </student> <teacher> <tea_name>alin</tea_name> <tea_age>16</tea_age> <tea_sex>女</tea_sex> </teacher> </persons> |
readXmlElement.cpp
#pragma comment(lib,"tinyxml.lib")
#include "tinyxml.h" #include <iostream> #include <string>
#define TIXML_USE_STL
int main(void) { TiXmlDocument *personDoc = new TiXmlDocument; personDoc->LoadFile("test.xml");
TiXmlElement *personElement = personDoc->RootElement(); std::cout<<personElement->Value()<<std::endl;
TiXmlElement *student = personElement->FirstChildElement(); std::cout<<" "<<student->Value()<<std::endl;
TiXmlElement *nameElement = student->FirstChildElement(); std::cout<<" "<<nameElement->Value();//<<std::endl; //std::cout<<" "<<nameElement->GetText()<<std::endl;
TiXmlElement *ageElement = nameElement->NextSiblingElement(); std::cout<<" "<<ageElement->Value()<<std::endl;
TiXmlElement *sexElement = ageElement->NextSiblingElement(); std::cout<<" "<<sexElement->Value()<<std::endl;
TiXmlElement *teacher = student->NextSiblingElement(); std::cout<<" "<<teacher->Value()<<std::endl;
TiXmlElement *teaNameElement = teacher->FirstChildElement(); std::cout<<" "<<teaNameElement->Value()<<std::endl;
TiXmlElement *teaAgeElement = teaNameElement->NextSiblingElement(); std::cout<<" "<<teaAgeElement->Value()<<std::endl;
TiXmlElement *teaSexElement = teaAgeElement->NextSiblingElement(); std::cout<<" "<<teaSexElement->Value()<<std::endl;
return 0; }
|
如果看懂了第一個例子,這個例子就非常好懂了。不用說什么,輸出以后答案都在屏幕上。
在真正的tinyxml使用過程中,往往是這兩種方式的組合使用,大多數游戲中的XML都比較復雜,元素的層次也很多,所以大家通過簡單的了解以后,更多的還要靠自己去練習,在實踐中提高。如果有什么疑問或者討論的,可以在這里留言,希望大家多多交流!