tinyXml解析XML文件

tinyXml解析XML文件TinyXML解析一个XML文档,并从该文档构建可读取、修改和保存的文档对象模型(DOM)。XML代表“可扩展标记语言”,它允许您创建您自己的文档标记。HTML在标记方面做得很好用于浏览器的文档,XML允许您定义任何类型的文档标记,例如描述组织者应用程序。XML是一种非常结构化和方便的格式。所有为存储应用程序数据而创建的随机文件格式都可以全部替换为XML。所有内…

大家好,又见面了,我是你们的朋友全栈君。

        TinyXML解析一个XML文档,并从该文档构建可读取、修改和保存的文档对象模型(DOM)。

        XML代表“可扩展标记语言”,它允许您创建您自己的文档标记。HTML在标记方面做得很好用于浏览器的文档,XML允许您定义任何类型的文档标记,例如描述组织者应用程序。XML是一种非常结构化和方便的格式。所有为存储应用程序数据而创建的随机文件格式都可以全部替换为XML。所有内容都有一个解析器。

        TinyXML设计为易于学习和快速学习。是两个.h和四个cpp文件。只需将这些添加到您的项目中就可以了。有一个示例文件xmltest.cpp可以让您开始。TinyXML是根据zlib许可证发布的,所以您可以在开放源码或商业代码中使用它。细节许可证在每个源文件的顶部。TinyXML试图成为一个灵活的解析器,但真正正确和兼容的XML输出。TinyXML应该编译任何合理的C++合规系统。它不依赖于异常或RTTI。它可以是使用或不使用STL支持编译。TinyXML完全支持UTF-8编码和前64K字符实体。

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

TinyXml中的各个基本类型之间的关系,看看这个继承图:

tinyXml解析XML文件

       TinyXML的结构及节点说明:

      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是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。它由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以用它的东西了。如果需要,可以将它做成自己的DLL来调用。

https://www.cnblogs.com/whlook/p/7117306.html

被解析的文件为test.xml,文件内容如下:

<?xml version="1.0" encoding="GBK" ?>
<root>
    <host checked="true" station="1001">AAA</host>
    <client>
        <name>xiaoming</name>
        <id>200801</id>
    </client>
</root>

解析该文件的C++程序如下:

#include <stdio.h>
#include "../tinyxml/tinyxml.h"

int main()
{
	// 解析xml
	TiXmlDocument xml_doc;
	if(!xml_doc.LoadFile("test.xml"))
	{
		return -1;
	}
	

	// 根节点
	TiXmlElement* xml_root = xml_doc.RootElement();
	if (NULL == xml_root)
	{
		return -1;
	}

	// 获取元素的文本与属性
	if(0)
	{
		TiXmlElement* xml_host = xml_root->FirstChildElement("host");
		const char* text = xml_host->GetText();
		const char* aChecked = xml_host->Attribute("checked");
		const char* aStation = xml_host->Attribute("station");
		printf("text:%s, check:%s, station:%s\n", text, aChecked, aStation);
	}

	//
	if(1)
	{
		TiXmlElement* xml_client = xml_root->FirstChildElement("client");

		TiXmlElement* xml_clientId = xml_client->FirstChildElement("id");
		TiXmlElement* xml_clientName = xml_client->FirstChildElement("name");

		const char* text_name = xml_clientName->GetText();
		printf("name = %s\n", text_name);

		// ...取得id和name的文本 ...
	}

	
	return 0;
}

解析复杂XML例子:

https://blog.csdn.net/wcy6340/article/details/9670201

 

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

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

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


相关推荐

  • prometheus监控日志告警_undo terminal monitor

    prometheus监控日志告警_undo terminal monitorkubernetes之prometheus监控第二篇-alertmanager监控告警:  在前期的博文中,我已经简单的介绍过了prometheus的安装,以及通过grafana来实施监控。这篇博文,我们更深入的介绍一下prometheus的监控。本篇博文主要分为以下几个知识点:1.使用prometheus监控ceph存储;2.学习简单的PromQL语言,在grafana里面根据业务自定…

    2022年10月3日
    3
  • Python如何生成exe文件?用Pycharm一步一步带着你学(超详细、超贴心)

    Python如何生成exe文件?用Pycharm一步一步带着你学(超详细、超贴心)目的描述:为了让没有安装Python的人也能使用我们编写的.py文件,我们需要将编写好的Python程序生成.exe文件。第一步下载pyinstallerpyinstaller插件是Python自带的插件,用于为我们写好的代码进行打包,最终自动合成.exe文件。在Pycharm界面的最下面,你可以看到Terminal,选择这个选项,这就是一个终端界面。在此界面写输入指令:pipin…

    2022年6月11日
    26
  • 手把手教你学DSP(TMS320X281X) 2020-11-30

    手把手教你学DSP(TMS320X281X) 2020-11-30内容为自己看《手把手教你学dspTMS320X281X》(顾卫刚版)图书的笔记,只是记录一下自己学习的思想历程。由于自己硬件学习也是新手,如有错误,请评论或者私信指出,如果看见一定更正;如果感觉本文对您有帮助,可以给个点赞;顺便可以关注或收藏一波不迷路。

    2022年4月30日
    48
  • jedis操作redis_redis java使用

    jedis操作redis_redis java使用1、Jedis客户端https://redis.io/clients2、Jedis源码包与使用介绍https://github.com/xetorthio/jedis3、项目中使用通过maven引入Jedis的依赖包<!–https://mvnrepository.com/artifact/redis.clients/jedis–><depen…

    2022年10月10日
    4
  • 银行家算法 C语言实现 带注释

    银行家算法 C语言实现 带注释银行家算法C语言实现带注释加粗样式****在这里插入代码片#include<stdio.h>#defineM100#defineN50///定义M个进程,N类资源voidInit();boolcheckSecurity(int);voidshow();intBank(int);intAvailable[M];///可利用资源数组intMax[N][M];///最大需求矩阵intAllocation[N][M];///

    2022年5月10日
    42
  • c语言病毒源码讲解,【病毒】震荡波病毒C语言源码「建议收藏」

    该楼层疑似违规已被系统折叠隐藏此楼查看此楼/*#include#include#include#include#include#defineNORM”\033[00;00m”#defineGREEN”\033[01;32m”#defineYELL”\033[01;33m”#defineRED”\033[01;31m”#defineBANNERGREEN”…

    2022年4月14日
    37

发表回复

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

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