windows客户端开发--使用tinyxml库解析xml文件

Posted 江南-一苇渡江

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows客户端开发--使用tinyxml库解析xml文件相关的知识,希望对你有一定的参考价值。


例如,微信windows客户端使用的duilib库中,界面就是用xml进行描述的。


所以,今天我们就来谈一谈windows客户端中,也就是C++中如何解析xml。


很多时候,我们都使用.ini文件来存储一些数据。


xml确实是有很多的优点,某种程度上来说也确实可以完全取代ini,但也并非如有些人鼓吹的处处都比ini强。

 xml,对于描述复杂的数据结构非常的方便,缺点相对ini使用麻烦一点。在表达较短的配置时,没有ini简练。而且因为它有比较严格的格式审查机制,容错性也不是特别好,在手写时容易出现错误。抛开配置的功能,作为存储传输数据的手段,xml还有个缺点就是它的处理和存储的效率非常低下,解析速度慢,占用更多的存储空间。

 ini,通常用于对软件的参数进行配置和记录。优点是使用方便,嵌入程序也容易,几个接口就够了,很容易掌握。配置文件更小巧,手工配置也更容易。缺点是它的结构只有2层,对于复杂类型数据描绘就显得比较无力了。另外ini文件有64kb的大小限制。

 对于很小的简单配置来说,ini无疑是一种更简练,方便的实现方式。而xml则适合应付更复杂的需求。

如何读写ini文件,我们之前的博客已经介绍过了,windows系统给我们提供了api。


现在就来讲讲如何解析xml.

这里,我们使用一个开源库叫做tinyxml

源码:

https://sourceforge.net/projects/tinyxml/点击打开链接

源代码不长,我们可以直接引入源代码。

首先我们写一个xml。这里需要注意的是,推荐使用notepad++,而不是使用windows自带的记事本。

创建一个xml,test.xml

<?xml version="1.0" encoding="utf-8"?>
<Strings>
  <!--system button-->
  <String>
    <StringKey>MinimizeTips</StringKey>
    <StringValue>最小化</StringValue>
  </String>
  
  <String>
    <StringKey>MaximizeTips</StringKey>
    <StringValue>最大化</StringValue>
  </String>
<Strings>


接下来,我们就是要把上面的xml读取出来,并以key-value的形式存入map中。map的使用我们也不再赘述,之前的博客有有过介绍。

首先是创建一个XMLDocument的对象;

然后就是通过xml的路径,导入文件

可以使用RootElement获得根节点

可以使用FirstChildElement获得第一个子节点

可以使用NextSiblingElement获得下一个节点

可以使用GetText方法获得节点中的字符串


void ReadXmlToMap(const std::string& path, std::map<std::string, std::string>& string_map)
{
	tinyxml2::XMLDocument doc;
	doc.LoadFile(path.c_str());
	tinyxml2::XMLElement *root = doc.RootElement();
	tinyxml2::XMLElement *node = root->FirstChildElement("String");
	while (node)
	{
		tinyxml2::XMLElement *key_element = node->FirstChildElement();
		tinyxml2::XMLElement *value_element = key_element->NextSiblingElement();
		string_map.insert(std::pair<std::string, std::string>(key_element->GetText(), value_element->GetText()));
		node = node->NextSiblingElement();
	}	
}



以上是关于windows客户端开发--使用tinyxml库解析xml文件的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 python zipfile 库解压缩带有密码的 .zip 文件

TinyXml 与 Rapidxml效率对照

C++那些事之优雅的解析XML

C++解析XML(Win10-x64+VS2015)

无法启动此程序,因为计算机中丢失tinyxml.dll。尝试重新安装该程序以解决此问题

tinyxml使用