使用XML文件存储数据

Using XML files to store data

本文关键字:数据 存储 文件 XML 使用      更新时间:2023-10-16

如果我要使用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)+"&ltxml+="<leavenode>"+XmlEscape(someValue)+"&ltxml+="</rootnode>"

然后有东西还在爆炸,所以天才工程师尝试了:

xml="<rootnode>"xml+="<leavenode>"+XmlEscape(someValue)+"&ltxml+="<leavenode>"+XmlEscape(someValue)+"&ltxml+="</rootnode>"xml=XmlEscape(xml)

注意:在处理接口时,这个过程实际上已经发生过两次了。

在你意识到这一点之前,你穿过电线的流最终看起来像

&amp;lt;根节点>帮助<根节点>&amp;lt;根节点&gt;ME&amp;lt;根节点&amp;gt;

摘要:

请使用图书馆。再见。

我们可以使用tinyXml2,让我们的工作更容易,只需包含tinyXml2的头和cpp文件,您就可以完成解析和编写了。请在上找到文档和手册

http://www.grinninglizard.com/tinyxml2/