简述
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;
}