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 文件