大家好,又见面了,我是你们的朋友全栈君。
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的结构及节点说明:
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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131571.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...