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


原创粉丝点击