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. CSUOJ 1271 Brackets Sequence 括号匹配

    Description ]. Output For each test case, print how many places there are, into which you insert a ' ...

  2. 【原创】MySQL CPU %sys高的案例分析(一)

    [现象] 最近关注MySQL CPU告警的问题时,发现有一种场景,有一些服务器最近都较频繁的出现CPU告警,其中的现象是 SYS CPU占比较高. 下面的截图来源于“MySQL CPU报警”采集的文件 ...

  3. Iphone6手机不同浏览器页面尺寸设计

    做移动端html5页面适配,通常要考虑很多种情况. 对于同一部手机,通常要考虑如下3点: 1. 在手机普通浏览器中打开,比如Safari浏览器,UC浏览器,QQ浏览器,360浏览器,谷歌浏览器. 2. ...

  4. 20162327WJH使用队列:模拟票务站台代码分析

    20162327WJH使用队列:模拟票务站台代码分析 用链队实现队列的情况 1.用链表实现队列的代码 关键方法代码及补全代(LinkedOueue类) public void enqueue(T el ...

  5. vue过滤器在v2.0版本用法

    vue 1.x 的写法在  vue 2.x版本已经废除 vue 1.x 写法 <body> <div id="app"> {{message | capit ...

  6. CSS选择器复习

    通用选择器:* 选择到所有的元素 选择子元素:> 选择到元素的直接后代(第一级子元素) 相邻兄弟选择器:+ 选择到紧随目标元素后的第一个元素 普通兄弟选择器:~ 选择到紧随其后的所有兄弟元素 伪 ...

  7. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

  8. 重温JavaScript获取CSS样式的方法(兼容各浏览器)

    众所周知,CSS样式有三种类型:行内样式.内部样式和外部样式,JavaScript获取CSS样式时分为两种情况:行内样式获取法 和 非行内样式获取法 . 一.行内样式获取相对简单,通过element. ...

  9. 华为S5300系列交换机V100R005SPH020升级补丁

    S23_33_53-V100R005SPH020.pat 附件: 链接:https://pan.baidu.com/s/1-qgNEtRsZbNnC4eK4DTctA  密码:wpn3

  10. Run native executable in Android App

    Run native executable in Android App Demo † Here's demo application called "Run Native Exe" ...