Tinyxml简单使用法

tinyxml2的简单运用 tinyxml2简介: tinyxml2是一个c++xml解析器,它非常高效,而且非常的小,可以很好地嵌入到其他的程序,几乎可以在所有场景运用(我的经验来看) tinyxml2简单读取 我们先写一个xml文本如下 test.xml this is a Sentence 我们对于tinyxml2的运用只需要加入一个头文件就行了 #include "tinyxm 阅读详情

1、概要介绍一下:

尝试了tinyxml,rapidxml,libxml2等3中第3方库,前两者相对较为轻量级,libxml2非常完善,强大。
这是网上总结出来的优缺点:
1、tinyxml当节点内容的空而使用GetText()方法时候会出错
2、rapidxml编码问题不是特别好
3、libxml2对内存释放要求较高,否则时常遇到core dump.


TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
     DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。


先介绍一下在TinyXML中,根据XML的各种元素来定义了一些类:
        TiXmlBase:整个TinyXML模型的基类。
        TiXmlAttribute:对应于XML中的元素的属性。
        TiXmlNode:对应于DOM结构中的节点。
        TiXmlComment:对应于XML中的注释。
        TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。
        TiXmlDocument:对应于XML的整个文档。
        TiXmlElement:对应于XML的元素。
        TiXmlText:对应于XML的文字部分。
       TiXmlUnknown:对应于XML的未知部分。 
       TiXmlHandler:定义了针对XML的一些操作。

tinyxml类图:

tinyxml类图



那么这些元素是如何对应的呢? 例如
<?xml version="1.0" encoding="utf-8"?>
<!– Our to do list data –>
<ToDo>
<Item priority="1"> Go to the <bold>Toy store!</bold></Item>
<Item priority="2"> Do bills</Item>
</ToDo> 


整个对象树: 


TiXmlDocument "demo.xml"
TiXmlDeclaration version="1.0" encoding="utf-8"?>
TiXmlComment " Our to do list data"
TiXmlElement "ToDo"
TiXmlElement "Item" Attribtutes: priority = 1
TiXmlText "Go to the "
TiXmlElement "bold"
TiXmlText "Toy store!"
TiXmlElement "Item" Attributes: priority=2
TiXmlText "Do bills" 


在tinyXML中,用FirstChild("名字")查找节点时,调用FirstChild函数的节点与要查找的节点必须成“父子关系”。


2、实现使用元素


如下是一个XML片段:
<Persons>
    <Person ID="1">
        <name>周星驰</name>
        <age>40</age>
    </Person>
    <Person ID="2">
        <name>白晶晶</name>
        <age>30</age>
    </Person>
</Persons>


一、读取XML
//创建一个XML的文档对象。
TiXmlDocument *myDocument = new TiXmlDocument("填上你的Xml文件名");
myDocument->LoadFile();
//获得根元素,即Persons。
TiXmlElement *RootElement = myDocument.RootElement();
//输出根元素名称,即输出Persons
cout << RootElement->Value() << endl;
//获得第一个Person节点。
TiXmlElement *FirstPerson = RootElement->FirstChildElement();
//获得第一个Person的name节点和age节点和ID属性。
TiXmlElement *NameElement = FirstPerson->FirstChildElement();
TiXmlElement *AgeElement = NameElement->NextSiblingElement();
TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();
//输出第一个Person的name内容,即周星驰;age内容,即40;ID属性,即1。
cout << NameElement->FirstChild()->Value << endl;
cout << AgeElement->FirstChild()->Value << endl;
cout << IDAttribute->Value() << endl;
   
二、生成XML内容
//创建一个XML的文档对象。
TiXmlDocument *myDocument = new TiXmlDocument();
//创建一个根元素并连接。
TiXmlElement *RootElement = new TiXmlElement("Persons");
myDocument->LinkEndChild(RootElement);
//创建一个Person元素并连接。
TiXmlElement *PersonElement = new TiXmlElement("Person");
RootElement->LinkEndChild(PersonElement);
//设置Person元素的属性。
PersonElement->SetAttribute("ID", "1");
//创建name元素、age元素并连接。
TiXmlElement *NameElement = new TiXmlElement("name");
TiXmlElement *AgeElement = new TiXmlElement("age");
PersonElement->LinkEndChild(NameElement);
PersonElement->LinkEndChild(AgeElement);
//设置name元素和age元素的内容并连接。
TiXmlText *NameContent = new TiXmlText("周星驰");
TiXmlText *AgeContent = new TiXmlText("40");
NameElement->LinkEndChild(NameContent);
AgeElement->LinkEndChild(AgeContent);
//保存到文件
myDocument->SaveFile("要保存的xml文件名");
这样,便创建了一个如下的xml文件:
<Persons>
    <Person ID="1">
        <name>周星驰</name>
        <age>40</age>
    </Person>
</Persons>


3、举例说明一下常见用法,以我当前做的项目取代码片段说明一下:
1、解析如下xml内容
<?xml version="1.0" encoding="utf-8"?>
<server ip = "" port = "" name = "" version = ""/>


核心解析代码:
for (element = document.FirstChildElement(); element; element
= document.NextSiblingElement()) {
while (sAttr != NULL) {
name = sAttr->Name();
value = sAttr->Value();
if (xmlstr_compare("ip", name)) {
if ('0' <= value[0] && value[0] <= '9') {
bc.ip = xml_inet_addr(value);
} else {
bc.ip = IP_INADDR_ANY;
}
} else if (xmlstr_compare("port", name)) {
bc.port = atoi(value);
} else if (xmlstr_compare("name", name)) {
memcpy((void*) bc.name, value, 16);
} else if (xmlstr_compare("version", name)) {
memcpy((void*) bc.version, value, 16);
}


sAttr = sAttr->Next();
}
}


2、如下的内容解析
<?xml version="1.0" encoding="utf-8"?>
<request id="" type="addeventhub">
<item name="touchscreen" multed = "16"  width="" height="" dpi="" componentid="1"/>
<item name="mouse" width="" height="" dpi="" componentid="2"/>
<item name="keyboard" componentid="3" />
<item name="dpad" componentid="4"/>
<item name="gamepad" componentid="5"/>
<item name="trackball" componentid="6"/>
</request>


核心解析代码:
while (sAttr != NULL) {
name = sAttr->Name();
value = sAttr->Value();
...
sAttr = sAttr->Next();
}

itemelement = element->FirstChildElement();
while (itemelement != NULL) {
int itemNo = -1;
name  = itemelement->GetText();
value = itemelement->Value();

itemAttr = itemelement->FirstAttribute();
while (itemAttr != NULL) {
name = itemAttr->Name();
value = itemAttr->Value();

...

itemAttr = itemAttr->Next();
} 
}


3、如何拼包
有如下xml buff内容,如何进行拼包呢?
<?xml version="1.0" encoding="utf-8"?>
<server ip = "" port = "" name = "" version = ""/>


xml_udp_bc *xbc = (xml_udp_bc*)xml_param->param;


if(xml_param->head_flag == 1){
p += sprintf(p, xml_head);
}


p += sprintf(p, "<server ip = \" ");
p += sprintf(p, xml_iptostr(xbc->ip));
p += sprintf(p, "\"");
p += sprintf(p, " port = \"%d\"",xbc->port);
p += sprintf(p, " name = \"%s\"",xbc->name);
p += sprintf(p, " version = \"%s\"",xbc->version);
p += sprintf(p, "/>");


对于拼包的话可以使用xml,但具体项目中没有使用这么复杂的东东,所以直接以字符串拼接好了

ok,简单的使用了一下非常简单!


TinyXml学习笔记 TinyXml学习笔记张弛>注:本文的最新版本可以在下面的地址找到       http://amidiot.512j.com/article/tinyxml/tinyxml_note.htm一、      TinyXml的特点TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器。1.      SAX和DOM目前XML的解析主要有两大模型:SAX和DOM 阅读详情

相关推荐

C++ 使用tinyxml库处理XML文件

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。以上就是今天要讲的内容,本文仅仅简单介绍了tinyxml的使用,包括创建XML文件及增删改查的操作演示。

a_13572035650的博客 2174

tinyXML使用

TinyXML是一个C++的XML解析库,网上的评价都不错,是一个轻量级的XML解析库。关于TinyXML使用的文章有很多,而且官方也有完整的文档,这里只是简单把自己使用记录写下来,方便以后查阅。        一个XML文档例子:(文章后面会把这个XML当作例子使用)     test.xml --> Persons> Person ID="

damenhanter的专栏 9416

TinyXML简单的生成和解析示例

#include <stdio.h> #include <string> using namespace std; #include "../tinyxml/tinyxml.h" int test1() { TiXmlDocument xml_doc; /*建立*/ //<A>a</A> TiXmlElement* xmlElemA =...

程序猿老樊的博客 623

Tinyxml基本用法

这里介绍一下Tinyxml的基本用法,废话不多说了,直接上代码。

weixin_42163707的博客 576

开源大模型本地部署实战:Llama、DeepSeek、Qwen选型与工程落地指南

大语言模型(LLM)本地部署已成为AI工程化核心环节,其本质不是比拼参数量或榜单分数,而是考察模型架构、推理引擎、量化支持、IDE集成与多模态扩展能力的系统性适配。Llama以纯净Transformer结构成为通用底座,依赖llama.cpp和GGUF量化实现跨平台轻量推理;DeepSeek深度优化代码与数学推理,通过原生OpenAPI、FlashAttention-2及tensor parallelism显著降低API延迟;Qwen则采用模块化设计,支持视觉编码器(Qwen-VL)、生物计算(Qwen-B

weixin_29952383的博客 395

大众奥迪诊断不求人:手把手解析SAE J2819(CAN TP2.0)协议报文与连接流程

本文深入解析大众奥迪车型诊断核心标准SAE J2819(CAN TP2.0)协议,详细拆解连接建立流程与报文控制字段。通过实战案例展示通道设置、参数协商等关键步骤,提供诊断设备配置建议和常见故障排查技巧,帮助工程师掌握汽车诊断通信协议的精髓。

weixin_30421809的博客 396

TinyXml的基本用法

有人说xml格式文件(简称xml)就是一个小型的数据库,对数据库的任何操作可以在xml格式上完成后,笔者对数据库以及xml的使用还没有达到这种地步,所以也就没有权利评价这句话,但是从这句话我们可以知道xml的重要性。一般的xml用作保存一些配置信息,或者是类的序列化,配置文件使用的比较多。既然使用了xml,那就需要寻找一种解析xml的利器。现提供的解析xml的利器非常的多,比如有通用的DOM(DO

laohanmao的专栏 1825

MATLAB2021b详细安装教程

1.下载 2.安装 下载安装包后打开iso文件,若是无法打开请用解压软件打开。 ①打开MATLAB_R2021b_win64,双击软件开始安装 ② 一直点击下一步,直到步骤③ ③选择我已有我的许可证的文件密钥,并输入62551-02011-26857-57509-64399-54230-13279-37181-62117-65158-40352-64197-45508-24369-45954-39446-39538-16936-10698-58393-44718-32560-10501-40

惜洛-Jankin的博客 9万+

TinyXML是的一些简单说明与用法

TinyXML是一个简单小巧,可以很容易集成到其它程序中的C++ XML解析器。 它能做些什么简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档方面HTML做得很好,然而XML允许你定义任何文档标记,比如可以为一

zeng622peng的专栏 2932

[QMT量化交易小白入门]-二十八、有了回测年化收益好的策略,如何在QMT量化实盘呢(附python代码解析)

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 2924

AI摄影师:自动构图与修图算法设计

AI摄影师:自动构图与修图算法设计​ ,人工智能,计算机视觉,大模型,AI,AI 摄影师的核心能力体现在两方面:自动构图(通过算法优化画面元素布局)与智能修图(自动调整光影、色彩、细节)。例如,手机摄影中的 “AI 构图建议” 功能可实时框选最佳拍摄区域,修图软件中的 “一键增强” 能在 0.1 秒内完成专业级调色,这些都依赖于计算机视觉与深度学习的深度融合。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

tinyxml简单解析

只需到http://sourceforge.net/projects/tinyxml/下载编译jike

c_tianzi的专栏 1020

杰理AC696N系列芯片,烧录的时候烧录器连接上芯片之后电脑显示无法识别该设备,该怎么解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1707

TinyXML的简单用法

TinyXML最新的发布版本是2.5.3,一直想用,今天拿出点时间用了用,现在把所掌握的初步简单用法整理一下。 首先编译库文件,TinyXML有两个编译版本,取决于是否使用STL。Build之后在新程序代码中include库中的tinyxml.h即可。下面是我的代码: #include  #include  #include "../tinyxml.h" int main

L_Andy的专栏 2222

Apollo Planning2.0决策规划算法代码详细解析 (1):环境搭建

1、官方提供连接:git clone https://github.com/ApolloAuto/application-pnc.git。此外,也更新了dreamview对pnc的支持,使得调试更加方便。apollo开源团队近期更新了planning版本,对代码进行了一定程度上的重构。(2)进入docker,并编译整个工程:./apollo.sh build_dbg。下载项目环境后使用aem进行环境配置;2、有一定基础建议直接拉取最新代码,自己手动进行编译。(1)环境安装: ./dev_start.sh。

自动驾驶Player的博客 1840

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TinyXML的简单应用

第一次应用TinyXML时想当然的认为会和别的库一样,是一个dll和一个头文件,其实不然。 1、新建自己的C++ 工程 2、把tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp加入到工程当中 由于TinyXML是由标准C++写的,对于那些在MFC中添加的会出现一个 C1010的致命错误

672

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

TinyXML类库和对象模型 以及简单的TinyXML的简单用法。

以下内容转自博客地址:http://www.cppblog.com/flyinghare/archive/2009/11/13/100873.html   感谢前辈们的积累对我的帮助 TinyXML是一个简单小巧,可以很容易集成到其它程序中的C++ XML解析器。 它能做些什么 简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(D

学峰的学习笔记 580

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

开源TinyXML 最简单的入门教程

TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件。 该项目属于开源项目,在sourceforge上边的链接是:http://sourceforge.net/projects/tinyxml/    当前最新版本是2.6.2   先看一下源码文档的结构:   Docs是帮助文档,里边有非常多的使用说明,仅仅截一张图看一下

duhaomin的专栏 1860

有关TinyXML使用的简单总结

有关TinyXML使用的简单总结     这次使用了TinyXML后,觉得这个东西真是不错,于是将使用方法坐下总结来和大家分享。    该解析库在开源网站(http://sourceforge.net )上有下载,在本Blog也提供下载(下载TinyXML)    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过

技术收藏 2047

TinyXML简单记录

啰嗦的开场白 tinyxml是开源的,小巧的xml处理库,c++编写。 在这里可以下载到最新的源码:http://sourceforge.net/projects/tinyxml/ 当前我下载到的最新版本为2.6.2 下载后解压,可以找到sln文件,vs2010及以上版本可以打开。 可以看到一共4个工程,其中有用的有2个,另外2个是test工程。 tinyxml和tin

胡老哈的学习记录 1358

[转]有关TinyXML使用的简单总结

最近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。以后的文章里会讲解使用Xerces进行C++ XML解析的例子,希望大家一起交流。 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解...

weixin_30652271的博客 80

自学简单的写一个创建TinyXML文件

最简单的一个创建,以此为基础可继续拓展 //1.创建XMl文档 tinyxml2::XMLDocument *pDoc=new tinyxml2::XMLDocument(); if(NULL==pDoc){ AfxMessageBox(_T("XML Create failed!\n")); } //2.添加declaration tinyxml2::XMLDeclarat

blogcaicai01的博客 629
上一篇: android编译产生的apk或so不安装
下一篇: 生活点滴记录-- 两点一线
andyhuabing
博客等级 码龄19年 704粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值