现在的位置: 首页 > 综合 > 正文

tinyxml的学习和简单使用

2013年09月01日 ⁄ 综合 ⁄ 共 1809字 ⁄ 字号 评论关闭

虽然看起来简单,但开始学习和使用却是不那么简单。

首先从 官网 下载源文件:4个cpp和2个h,然后加入到工程即可。

在你的代码中加上2句:

#include "tinyxml.h"
#include "tinystr.h"

(刚开始只加了tinyxml.h,以为这个头文件包含了tinystr.h,结果编译一大堆问题,其实tinystr.h不一定会包含,它是通过一个宏定义控制的)

(这个tinyxml是跨平台的,所以在windows中用时,如果你的编译器选择了预编译头,那么你要打开4个cpp,在开头加一句#include "stdafx.h")

下面看例子:

	void DoMyXml()
	{
		TiXmlDocument* doc = new TiXmlDocument();  //最开始我用了一个类,加了一个TiXmlDocument doc;成员变量,结果读取一直错误。所以我就采用了指针,问题就没了。很奇怪?
		int select = 2;
		if(select == 1)
			goto SAVE;
		else
			goto READ;
	SAVE:
		// Save
		TiXmlElement* edu = new TiXmlElement("中国大学");  //想象成 树节点
		TiXmlElement* dept = new TiXmlElement("计算机专业");
		TiXmlElement* cls = new TiXmlElement("三年二班");

		doc->LinkEndChild(edu);  //使edu成为doc的子节点
		edu->LinkEndChild(dept);
		dept->LinkEndChild(cls);

		int no[5] = {20001,2000,200,20,2};
		char* name[5] = {"古月哥欠5","古月哥欠","古月哥","古月","古"};
		for(int i=0; i<5; i++)
		{
			TiXmlElement* stu_ = new TiXmlElement("stu");  
			stu_->SetAttribute("No",no[i]);  //属性
			TiXmlElement* name_ = new TiXmlElement("Name");  //子节点名字
			TiXmlText* text_ = new TiXmlText(name[i]);  //子节点内容
			name_->LinkEndChild(text_);  //把子节点内容关联到子节点中(注意xml语法)
			stu_->LinkEndChild(name_);

			cls->LinkEndChild(stu_);
		}

		doc->SaveFile("MyTinyXml.xml");
		goto END;
		
	READ:
		// Read
		doc->LoadFile("MyTinyXml.xml");

		TiXmlElement* eu = doc->RootElement();
		printf_s("%s \n",eu->Value());
		TiXmlElement* dt = eu->FirstChildElement();
		printf_s("%s \n",dt->Value());
		TiXmlElement* cs = dt->FirstChildElement();
		printf_s("%s \n",cs->Value());

		TiXmlElement* stu = cs->FirstChildElement();
		do 
		{
			const char* attr = stu->Attribute("No");
			printf_s("%s \n",attr);

			TiXmlElement* name_ = stu->FirstChildElement();  
			printf_s("%s \n",name_->GetText());;

			stu = stu->NextSiblingElement();  //兄弟节点
		} while (stu != NULL);
		goto END;

	END:
		doc->Clear();
		delete doc;
	}

xml:

<中国大学>
    <计算机专业>
        <三年二班>
            <stu No="20001">
                <Name>古月哥欠5</Name>
            </stu>
            <stu No="2000">
                <Name>古月哥欠</Name>
            </stu>
            <stu No="200">
                <Name>古月哥</Name>
            </stu>
            <stu No="20">
                <Name>古月</Name>
            </stu>
            <stu No="2">
                <Name>古</Name>
            </stu>
        </三年二班>
    </计算机专业>
</中国大学>

 

抱歉!评论已关闭.