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 中文指南

















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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 回话控制

    回话控制

  • 腾讯业务架构:六大事业群

    腾讯业务架构:六大事业群2018年9月29日,腾讯宣布在BU化的基础上进行组织架构调整,将原有七大事业群调整为六大事业群,具体为:a.保留企业发展事业群(CDG)、互动娱乐事业群(IEG)、技术工程事业群(T…

  • 500-内部服务器错误_打开网页500错误怎么解决

    500-内部服务器错误_打开网页500错误怎么解决我win2003的操作系统,部署了asp网站到服务器上,但是,奇怪的是只能进入前台,每次进入后台都出现HTTP500-内部服务器错误真实郁闷坏了,用百度搜索了半天,大都是转载的千篇万律而且长篇大论的解决办法什么帐户密码不同步之类啊,误导我了呀,害我费劲了很大半天。没有想到,只是在一个小小的操作上就解决了。窃喜。一、启用Asp支持WindowsServer2003默认安

  • 八大排序算法

    八大排序算法概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分…

  • Pytest(2)使用和调用方法

    Pytest(2)使用和调用方法Pytest执行用例规则Pytest在命令行中支持多种方式来运行和选择测试用例1.对某个目录下所有的用例pytest2.对模块中进行测试pytesttest_mod.py3.对文件夹进行

  • java分层打印二叉树_基于Java的二叉树层序遍历打印实现

    java分层打印二叉树_基于Java的二叉树层序遍历打印实现层序遍历的思路:若树为空,则返回空,否则从树的第一层开始,即从根节点,从上而下逐层遍历。1.二叉树层序遍历Ⅰ——剑指offer32-Ⅰ从上到下,从左到右打印二叉树,返回一维数组int[]res。classSolution{publicint[]levelOrder(TreeNoderoot){if(root==null)returnnewint[0];Queueq=…

发表回复

您的电子邮箱地址不会被公开。

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