随笔 - 40, 文章 - 0, 评论 - 9, 引用 - 0
数据加载中……

Tinyxml使用入门手记

http://www.dingge.com/forum/dispbbs.asp?boardID=43&ID=14213&page=1

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


posted on 2008-09-19 10:36 阅读(1802) 评论(0)  编辑 收藏 引用 所属分类: xml编译器


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理