最
近在准备给自己的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都比较复杂,元素的层次也很多,所以大家通过简单的了解以后,更多的还要靠自己去练习,在实践中提高。如果有什么疑问或者讨论的,可以在这里留言,希望大家多多交流!