xml快速入门(tinyxml解析)

本文介绍了一种使用TinyXML库生成和解析XML文件的方法。详细展示了如何通过C++代码创建XML文档、添加节点和文本,以及如何从XML文件中读取和处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

xml是一种可扩展标记语言,用于传输和存储数据。

语法

1.xml必须有根节点

  <root>

  <child>child</child>

  </root>

2xml节点必须有始有终(有关闭标签)

  <radius>1</radius>

3 xml标签对大小写敏感

  <grayscale>100</Grayscale>是错误的

4. xml属性值加双引号

  <model name="modelCircle">

5. xml注释

  <!--注释-->

6.xml声明文件version项必须写

  <?xml version="1.0" encoding="utf-8"?>

示例

xml文件解析库(tinyxml)

   tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,可以满足绝大部分功能需要。而且它使用很简单,只需要拷贝六个文件到你的工程中就可以使用了。

  TiXmlDocument : XML文档类,它一般用于指示一个文档对象;

  TiXmlDeclaration:  XML标识类,也就是XML文件第一行中标注的相关信息;

  TiXmlElement:    XML节点类,这个类用来表示一个节点;

  TiXmlText:      XML节点类的文本信息类,标注了XML节点类的文本信息;

  TiXmlComment: XML的注释信息类,用来标识XML文档类的注释信息;

tinyXML库的使用步骤及常用API

生成xml文件

(1)创建xml文件,生成一个文件句柄

         TiXmlDocument *doc = new TiXmlDocument();

(2)添加版本及编码格式

         TiXmlDeclaration *declaration= new TiXmlDeclaration("1.0", "UTF-8", "");

(3)编码格式节点加入文件

         doc->LinkEndChild(declaration);

(4)创建文件唯一根节点

        TiXmlElement *root= new TiXmlElement("root");

        doc ->LinkEndChild(root);

(5)创建一个子节点,,并且加入根节点

       TiXmlElement*firstChild=newTiXmlElement("firstChild”);

       root->LinkEndChild(firstChild);

(6)创建一个叶子节点,此节点为最后一次节点,

       TiXmlElement *leaf= new TiXmlElement("leaf");

       firstChild->LinkEndChild(leaf);

(7)保存文件,

 doc->SaveFile("text.xml");

解析xml文件

(1)获取xml文件句柄
       TiXmlDocument d(“text.xml”);
(2)获取根节点
       TiXmlElement *root= rootElement->FirstChildElement("root");
(3)获取第一个节点
       TiXmlElement *firstChild= root->FirstChildElement("firstChild");
(4)获取节点值和节点名
       firstChild->Value()     char* 类型
       firstChild->GetText()    char* 类型

tinyXML库的解析代码实例

 

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include "tinyxml.h"

int main()
{
	/*----------------xml文件生成---------------*/
	//创建xml文件
	TiXmlDocument *doc = new TiXmlDocument();										

	//添加版本及编码格式
	TiXmlDeclaration *declaration = new TiXmlDeclaration("1.0", "UTF-8", "");		
	doc->LinkEndChild(declaration);

	//文件根节点
	TiXmlElement *modelRoot = new TiXmlElement("model");	
	modelRoot->SetAttribute("name", "modelCircle");
	doc->LinkEndChild(modelRoot);

	//创建节点 type
	TiXmlElement *createType = new TiXmlElement("type"); 
	modelRoot->LinkEndChild(createType);
	//添加叶子节点,此节点为最后一层子节点
	TiXmlText *typeText = new TiXmlText("1");
	createType->LinkEndChild(typeText);

	//创建节点 position
	TiXmlElement *createPosition = new TiXmlElement("position");
	modelRoot->LinkEndChild(createPosition);
	//添加子节点
	TiXmlElement *createX= new TiXmlElement("x");
	createPosition->LinkEndChild(createX);
	//添加叶子节点,此节点为最后一层子节点
	TiXmlText *xText = new TiXmlText("10");
	createX->LinkEndChild(xText);

	TiXmlElement *createY = new TiXmlElement("y");
	createPosition->LinkEndChild(createY);
	//添加叶子节点,此节点为最后一层子节点
	TiXmlText *yText = new TiXmlText("10");
	createY->LinkEndChild(yText);

	TiXmlElement *createZ = new TiXmlElement("z");
	createPosition->LinkEndChild(createZ);
	//添加叶子节点,此节点为最后一层子节点
	TiXmlText *zText = new TiXmlText("10");
	createZ->LinkEndChild(zText);


	//创建节点 position
	TiXmlElement *createSize = new TiXmlElement("size");
	modelRoot->LinkEndChild(createSize);
	//添加子节点 radius
	TiXmlElement *createRadius = new TiXmlElement("radius");
	createSize->LinkEndChild(createRadius);
	//添加叶子节点,此节点为最后一层子节点
	TiXmlText *radiusText = new TiXmlText("1");
	createRadius->LinkEndChild(radiusText);

	//创建节点 position
	TiXmlElement *createGrayscale = new TiXmlElement("Grayscale");
	modelRoot->LinkEndChild(createGrayscale);
	//添加叶子节点,此节点为最后一层子节点
	TiXmlText *grayscaleText = new TiXmlText("100");
	createGrayscale->LinkEndChild(grayscaleText);

	//保存文件
	doc->SaveFile("model.xml");
	


	/*----------------xml文件解析---------------*/
	
	const char *filePath = "model.xml";
	TiXmlDocument d(filePath);

	if (d.LoadFile())
	{
		d.Print();				//打印文件内容
	}
	
	//获取跟元素
	TiXmlElement *rootElement = d.RootElement();
	std::cout << rootElement->Value() << std::endl;

	//获取第一个节点type
	TiXmlElement *type = rootElement->FirstChildElement("type");
	std::cout << type->Value() << ":";
	std::cout << type->GetText() << std::endl;

	//position  三维左边x,y,z
	TiXmlElement *position = rootElement->FirstChildElement("position");;
	std::cout << position->Value() << std::endl;
	TiXmlElement *x = position->FirstChildElement("x");;
	std::cout << x->Value() << ":";
	std::cout << x->GetText() << std::endl;

	TiXmlElement *y = position->FirstChildElement("y");;
	std::cout << y->Value() << ":";
	std::cout << x->GetText() << std::endl;
	
	TiXmlElement *z = position->FirstChildElement("z");;
	std::cout << z->Value() << ":";
	std::cout << x->GetText() << std::endl;

	//模型大小	size
	TiXmlElement *size = rootElement->FirstChildElement("size");;
	std::cout << size->Value() << std::endl;
	TiXmlElement *radius = size->FirstChildElement("radius");;
	std::cout << radius->Value() << ":";
	std::cout << radius->GetText() << std::endl;

	//灰度		Grayscale
	TiXmlElement *grayscale = rootElement->FirstChildElement("Grayscale");;
	std::cout << grayscale->Value() << ":";
	std::cout << grayscale->GetText() << std::endl;

	return 0;
}

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值