xml快速入门(tinyxml解析)
来源:互联网 发布:算法工程师专业 编辑:程序博客网 时间:2024/06/04 21:01
简述
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库:下载
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);//创建节点 typeTiXmlElement *createType = new TiXmlElement("type"); modelRoot->LinkEndChild(createType);//添加叶子节点,此节点为最后一层子节点TiXmlText *typeText = new TiXmlText("1");createType->LinkEndChild(typeText);//创建节点 positionTiXmlElement *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);//创建节点 positionTiXmlElement *createSize = new TiXmlElement("size");modelRoot->LinkEndChild(createSize);//添加子节点 radiusTiXmlElement *createRadius = new TiXmlElement("radius");createSize->LinkEndChild(createRadius);//添加叶子节点,此节点为最后一层子节点TiXmlText *radiusText = new TiXmlText("1");createRadius->LinkEndChild(radiusText);//创建节点 positionTiXmlElement *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;//获取第一个节点typeTiXmlElement *type = rootElement->FirstChildElement("type");std::cout << type->Value() << ":";std::cout << type->GetText() << std::endl;//position 三维左边x,y,zTiXmlElement *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;//模型大小sizeTiXmlElement *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;//灰度GrayscaleTiXmlElement *grayscale = rootElement->FirstChildElement("Grayscale");;std::cout << grayscale->Value() << ":";std::cout << grayscale->GetText() << std::endl;return 0;}
- xml快速入门(tinyxml解析)
- TinyXml快速入门(一)
- TinyXml快速入门(二)
- TinyXml快速入门(三)
- TinyXml快速入门(一)
- TinyXml快速入门(二)
- TinyXml快速入门(三)
- TinyXml快速入门(一)
- TinyXml快速入门(一)
- TinyXml快速入门(三)
- TinyXml快速入门(一) .
- TinyXml快速入门(一)
- TinyXml快速入门(一)
- TinyXml快速入门(一)
- TinyXml快速入门(二)
- TinyXml快速入门(三)
- TinyXml快速入门(二)
- TinyXml快速入门(一)
- 多线程2、GUI、设计模式
- The study of List Comprehensions in Python(20170911)
- 分拆数 && hdu 4651 && hdu 4658
- 基于esp8266的开发导航帖arduino ide for esp8266
- 面试题61. 按之字形顺序打印二叉树
- xml快速入门(tinyxml解析)
- 欢迎使用CSDN-markdown编辑器
- 性能测试工具ab使用记录
- 【软考】--操作系统导图
- 希尔排序
- bzoj1042 [HAOI2008]硬币购物
- git命令-切换分支
- bzoj1089 [SCOI2003]严格n元树
- poj 2478 (欧拉函数)