1.介绍

  读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。  

  下载TinyXML的网址:http://www.grinninglizard.com/tinyxml/

  使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。

 2.读取XML文件

如读取文件a.xml:

<ToDo>
<Item priority="">
<bold>
Book store!
</bold>
</Item>
<Item priority="">
book1
</Item>
<Item priority="">
book2
</Item>
</ToDo>

读取代码如下:

 #include "tinyxml.h"
#include <iostream>
#include <string> using namespace std; enum SuccessEnum {FAILURE, SUCCESS}; SuccessEnum loadXML()
{
TiXmlDocument doc;
if(!doc.LoadFile("a.xml"))
{
cerr << doc.ErrorDesc() << endl;
return FAILURE;
} TiXmlElement* root = doc.FirstChildElement();
if(root == NULL)
{
cerr << "Failed to load file: No root element." << endl;
doc.Clear();
return FAILURE;
} for(TiXmlElement* elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement())
{
string elemName = elem->Value();
const char* attr;
attr = elem->Attribute("priority");
if(strcmp(attr,"")==)
{
TiXmlElement* e1 = elem->FirstChildElement("bold");
TiXmlNode* e2=e1->FirstChild();
cout<<"priority=1\t"<<e2->ToText()->Value()<<endl; }
else if(strcmp(attr,"")==)
{
TiXmlNode* e1 = elem->FirstChild();
cout<<"priority=2\t"<<e1->ToText()->Value()<<endl;
}
}
doc.Clear();
return SUCCESS;
} int main(int argc, char* argv[])
{
if(loadXML() == FAILURE)
return ;
return ;
}

3.生成XML文件

如生成文件b.xml如下所示:

<root>
<Element1 attribute1="some value" />
<Element2 attribute2="" attribute3="">
<Element3 attribute4="" />
Some text.
</Element2>
</root>

生成上面b.xmlL文件代码如下:

 #include "tinyxml.h"
#include <iostream>
#include <string>
using namespace std; enum SuccessEnum {FAILURE, SUCCESS}; SuccessEnum saveXML()
{
TiXmlDocument doc; TiXmlElement* root = new TiXmlElement("root");
doc.LinkEndChild(root); TiXmlElement* element1 = new TiXmlElement("Element1");
root->LinkEndChild(element1); element1->SetAttribute("attribute1", "some value"); TiXmlElement* element2 = new TiXmlElement("Element2"); ///元素
root->LinkEndChild(element2); element2->SetAttribute("attribute2", "");
element2->SetAttribute("attribute3", ""); TiXmlElement* element3 = new TiXmlElement("Element3");
element2->LinkEndChild(element3); element3->SetAttribute("attribute4", ""); TiXmlText* text = new TiXmlText("Some text."); ///文本
element2->LinkEndChild(text); bool success = doc.SaveFile("b.xml");
doc.Clear(); if(success)
return SUCCESS;
else
return FAILURE;
} int main(int argc, char* argv[])
{
if(saveXML() == FAILURE)
return ;
return ;
}

4.重要函数或类型的说明

  (1)FirstChildElement(const char* value=0):获取第一个值为value的子节点,value默认值为空,则返回第一个子节点。

  (2)NextSiblingElement( const char* _value=0 ) :获得下一个(兄弟)节点。

  (3)LinkEndChild(XMLHandle *handle):添加一个子节点。元素或者文本

C++ 使用TinyXML解析XML文件的更多相关文章

  1. Cocos2d-x 3.0 使用TinyXml 解析XML文件

    在cocos2d-x 3.0中Xml解析已经不用自己找库了,已经为我们集成好了. text.xml <!--?xml version ="1.0" encoding =&qu ...

  2. 转:VC解析XML文件-CMarkup的使用详解

    本篇文章是对VC解析XML文件-CMarkup的使用进行了详细的分析介绍,需要的朋友参考下 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等. 据说tinyX ...

  3. 转载 VC轻松解析XML文件 - CMarkup类的使用方法

    VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ...

  4. C++生成和解析XML文件

    1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预 ...

  5. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  6. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  7. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  8. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  9. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

随机推荐

  1. 洛谷P2525 Uim的情人节礼物·其之壱 [康托展开]

    题目传送门 Uim的情人节礼物·其之壱 题目描述 情人节到了,Uim打算给他的后宫们准备情人节礼物.UIm一共有N(1<=N<=9)个后宫妹子(现充去死 挫骨扬灰!). 为了维护他的后宫的 ...

  2. 开始一个Django项目的简单方法

    DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',         'NAME': '数据库名(你 ...

  3. 【递推】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] D. XOR-pyramid

    题意:定义,对于a数组的一个子区间[l,r],f[l,r]定义为对该子区间执行f操作的值.显然,有f[l,r]=f[l,r-1] xor f[l+1,r].又定义ans[l,r]为满足l<=i& ...

  4. 【BFS】【最小生成树】Petrozavodsk Winter Training Camp 2018 Day 1: Jagiellonian U Contest, Tuesday, January 30, 2018 Problem G. We Need More Managers!

    题意:给你n个点,点带权,任意两点之间的边权是它们的点权的异或值中“1”的个数,问你该图的最小生成树. 看似是个完全图,实际上有很多边是废的.类似……卡诺图的思想?从读入的点出发BFS,每次只到改变它 ...

  5. Windows Phone background Audio 后台音频

    Windows Phone 后台音频的确不是什么新鲜的话题了,但发现目前在WP平台的音频播放应用多多少少会有一些瑕疵,所以在此给大家在此介绍下这个功能给有需要的朋友们. 首先介绍下我们的应用在后台播放 ...

  6. Uva 12889 One-Two-Three

      Your little brother has just learnt to write one, two and three, in English. He has written a lot ...

  7. jmeter用BeanShell调用jar包对HTTP请求中的参数进行MD5加密

    前提: eclipse.JDK.Jmeter 说明: 本文分为两部分进行配置说明 第一部分:编写JavaMD5加密脚本 第二部分:使用Jmeter的BeanShell进行验证 ************ ...

  8. php远程获取图片或文件信息(get_headers,fsocketopen,curl)

    <?php if(!function_exists("remote_filesize")){ /** * 获取远程或本地文件信息 * @param string $strUr ...

  9. Linux服务器压测/拷机软件收集

    最近公司采购了一批服务器,于是收集了一些拷机软件来压测服务器硬件性能.硬件的稳定相对来说比较重要,7x24小时无间断运行,主要看三个硬件:CPU.内存.硬盘. 下面是收集的一些教程,可能网址已经失效了 ...

  10. MVC为用户创建专属文件夹

    假设需要为用户创建专属文件夹,文件夹名为用户名,并且需要根据用户类型在不同的文件夹下创建目标文件夹. 在F盘创建"Users"文件夹,在其中创建"Gold"文件 ...