TinyXml高速入门(一)

TinyXml高速入门(一)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

作者:朱金灿
来源:http://blog.csdn.net/clever101


      对于xml文件,眼下我的工作仅仅是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这样的重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐。因此对于简单的xml文件的解析,我更愿意使用开源的TinyXml。


      首先介绍一下TinyXml吧。TinyXML是眼下很流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,很适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作,其主页是:http://www.grinninglizard.com/tinyxml/ ,眼下最新版本号是2.5.3 版本号。

TinyXml网上的教程非常多,可是我认为写得都不如何(感觉就是看完之后就没学会)。没办法,仅仅得自己整理一篇适合自己的,至于适不适合别人,就见仁见智了。我感觉xml文件本质就是小型的数据库,换个角度来说就是,你对数据库有什么操作你对xml文件就应能实现什么操作。一般而言,对数据库的操作包含下面几种:新建数据库、查询数据库、改动数据库和删除数据库。那么相应xml文件就是新建xml文件、查询xml文件的指定节点的值,改动xml文件里节点的值和删除xml文件里节点的值。


       首先我们认识一下xml文件有哪几种形式。以下我列出一些经常使用的xml文件的形式:



      上面的样例摘自《TinyXML Tutorial 中文指南》。上面有四个样例,你看到了xml文件的几种表现形式?我看到了本质来说只是是两种表现形式:属性值值在尖括号内,如<Window name=”MainFrame” x=”5″ y=”15″ w=”400″ h=”250″ />和文本在尖括号外,如<Welcome>Welcome to MyApp</Welcome>,详细例如以下图:


xml struct


     鉴于example4.xml比較复杂,以下我将以此为例介绍tinyxml的使用。


     Tinyxml使用了两种编译选择:使用标准C的char *类型或者使用STL中的std::string,当中使用预处理器TIXML_USE_STL进行控制,即加入�了TIXML_USE_STL为使用std::string的。鉴于STL的广泛使用以及其强大功能,以下我以使用std::string的tinyxml说明。

首先使用VS 2005打开tinyxmlSTL.dsp的project文件,将其编译成一个静态库,debug版本号为:tinyxmld_STL.lib,然后開始測试tinyxml库。我的測试计划是这种:首先使用tinyxml库创建example4.xml,然后将其读出来,然后查询指定节点的属性或文本,再改动example4.xml(改动当中的一些节点值和删除当中一个节点,添加�一个节点),然后再读出来以推断是否改动成功。详细是在VS 2005上新建一个控制台project:Test,注意使用多字节字符集进行编译,同一时候加入�。首先是创建xml文件的代码:


    



       不知你注意到上面的规律没有?首先父节点连接字节点使用函数LinkEndChild,用法是:pParentNode-> LinkEndChild(pChild);其次设置相似这样的结构<Window name=”MainFrame” x=”5″ y=”15″ w=”400″ h=”250″ />採用SetAttribute函数,这个函数有两个參数,前一个參数表示键,后一个參数表示键值,设置<Farewell>Thank you for using MyApp</Farewell>这样的结构採用TiXmlText类,使用LinkEndChild函数进行连结。


      上面是创建xml文件的代码,以下介绍读取xml文件的代码。打印整个xml文件的代码非常easy,代码例如以下:




   下次介绍使用tinyxml库对xml文件进行查询指定节点、删除指定节点、改动指定节点和添加�节点的使用方法。

參考文献:


1.《TinyXML新手教程


2. 《tinyxml 使用笔记与总结


3. 《TinyXML Tutorial 中文指南

















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118212.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 程序已在运行,只能运行一个实例_最常用解决冲突的办法

    程序已在运行,只能运行一个实例_最常用解决冲突的办法//开发中常用的只允许一个程序运行的办法//程序以单例模式运行常用办法,创建一个互斥量//由于互斥量只允许一个进程或者线程占用会创建失败,利用这个特性可以做到单例运行改程序#include"stdafx.h"#include&lt;windows.h&gt;#include&lt;stdio.h&gt;int_tmain(intargc,_TCHAR*argv[]…

    2022年10月5日
    5
  • fwrite和fread函数的用法小结_fwrite和fread

    fwrite和fread函数的用法小结_fwrite和fread1.函数功能用来读写一个数据块。2.一般调用形式fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);3.说明(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。(2)size:要读写的字节数;(3)count:要

    2025年9月16日
    5
  • Linux内核编写_全志linux驱动写寄存器

    Linux内核编写_全志linux驱动写寄存器在一个结构体中定义各连续的寄存器(每个寄存器占四个字节),然后将offset首地址ioremap,得到的地址传给结构体指针。然后操作寄存器的时候,就操作结构体成员就ok了。

    2022年10月8日
    2
  • 美化包软件_手机音量进度条 插件

    美化包软件_手机音量进度条 插件前言在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

    2022年7月31日
    4
  • RFID-MFRC522射频识别模块,S50卡M1

    RFID-MFRC522射频识别模块,S50卡M1射频识别模块什么是RFIDMFRC522S50-M1卡1、主要指标2、存储结构RC522与ArduinoUNO的接线什么是RFID无线射频识别即射频识别技术(RadioFrequencyIdentification,RFID),是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对记录媒体(电子标签或射频卡)进行读写,从而达到识别目标和数据交换的目的。MF…

    2022年7月14日
    14
  • mysql explain ref列_MySQL EXPLAIN详解

    mysql explain ref列_MySQL EXPLAIN详解MySQLEXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45MySQLEXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令的使用及相关参数说明。EXPLAINOutputColumns列名说明id执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1。否则,内…

    2022年10月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号