使用XML文件存储数据
Using XML files to store data
如果我要使用XML文件来存储一些信息,我是否需要一个读取/写入数据的XML解析器?我可以只使用字符串操作函数吗?为什么不呢?
您可以设想使用字符串操作函数,因为XML库最终都会使用这些函数。XML文档只是一种特殊格式的长字符串。然而,除非您对XML(以及什么是有效的XML,什么不是有效的XML)有很多了解,否则现在使用XML解析器/序列化程序将为您以后省去很多麻烦。XML存在细微差别(名称空间、转义序列等),这将导致不知道如何正确处理它们的自主代码出现问题。当您处理完所有的特殊情况时,您实际上已经编写了一个半吊子的XML解析器。
不要。。。我重复一遍。。。不要手动解析或构建XML。
在我的工作中,我们在不同的供应商之间实现了许多接口。我无法告诉你我们在基于xml的接口上工作了多少次,遇到了某种转义编码/解码问题。当我连接到基于xml的服务时,我将运行的第一个测试之一是在输入中放入非法的xml字符。
你叫什么名字?:bob<>&"
分析XML文档时出错!
我们已经多次遇到它,如果我们的任何工程师检查类似于的东西
xml="<rootnode>"xml+="<leavenode>"+someValue+"</leavenode<"xml+="</rootnode>"
我们将认真考虑对接他们的可变薪酬。一旦"someValue"包含非法字符,您就会被罚下场。然后你的代码开始看起来像这样:
xml="<rootnode>"xml+="<leavenode>"+XmlEscape(someValue)+"<xml+="<leavenode>"+XmlEscape(someValue)+"<xml+="</rootnode>"
然后有东西还在爆炸,所以天才工程师尝试了:
xml="<rootnode>"xml+="<leavenode>"+XmlEscape(someValue)+"<xml+="<leavenode>"+XmlEscape(someValue)+"<xml+="</rootnode>"xml=XmlEscape(xml)
注意:在处理接口时,这个过程实际上已经发生过两次了。
在你意识到这一点之前,你穿过电线的流最终看起来像
&;lt;根节点>帮助<根节点>&;lt;根节点>;ME&;lt;根节点&;gt;
摘要:
请使用图书馆。再见。
我们可以使用tinyXml2,让我们的工作更容易,只需包含tinyXml2的头和cpp文件,您就可以完成解析和编写了。请在上找到文档和手册
http://www.grinninglizard.com/tinyxml2/
- 将从格式化文本文件读取的文本数据存储到链表
- 将线程中的数据存储到全局容器的最佳方法?
- 将数据存储在内存中以供以后访问
- 将一个阵列中的数据存储到另外两个阵列中不起作用
- 如何将函数的输出数据存储在文本文件中
- 将结构数据存储在循环缓冲区中
- 安卓中的Qt和应用程序数据存储
- C++ 将数据存储在对齐数组的中间
- 如何删除字符串中的所有空格并将数据存储在两者之间
- 实现双链接列表,其中数据存储在堆上
- 是否有一种方法可以从文本文件中读取并将单个数据存储为不同的变量
- 了解字符数组初始化和数据存储
- 如何在C++中将字符串数据存储在字符串 2D 数组中
- 将数据存储在具有可互换 x/y 坐标的 2D 矩阵中
- 将文件中的数据存储到数组中
- 将数据存储到地图
- 保存和加载类数据存储在C 中的二进制文件中
- 将由结构构建的数组传递到将数据存储到文件中的函数
- 在这种情况下,将数据存储在诸如SQLite之类的数据库中,还是存储在平面文本文件中更好
- 将数据存储在char数组中导致变量周围损坏