使用XML文件存储数据

时间:2011-06-04 03:09:39

标签: c++ xml

如果我要使用XML文件存储一些信息,我是否需要一个读/写数据的XML Parser?我可以使用字符串操作函数吗?为什么不呢?

3 个答案:

答案 0 :(得分:5)

你可以想象使用字符串操作函数,因为这就是XML库最终使用的结果。 XML文档只是特殊格式的长字符串。但是,除非您对XML(以及什么是有效的XML)知之甚少,否则现在使用XML解析器/序列化器将为您节省很多麻烦。 XML(命名空间,转义序列等)存在细微差别,这些细微差别将导致本地代码中的问题无法正确处理它们。当你处理完所有特殊情况时,无论如何你都会有效地编写一个半分析的XML解析器。

答案 1 :(得分:4)

不要......我再说一遍......不要手工解析或构建XML。

在我的工作中,我们在不同供应商之间实现了很多接口。我不能告诉你我们多少次在基于xml的界面上工作并遇到某种转义编码/解码问题。当我连接到基于xml的服务时,我将运行的第一个测试之一是将非法的xml字符放入输入中。

你叫什么名字?:bob<>&“

!错误分配XML文档!

如果我们的任何工程师检查类似于:

的任何内容,我们已经遇到过很多次
xml = "<rootnode>"
xml += "<leafnode>" + someValue + "</leafnode>"
xml += "</rootnode>"

我们会认真考虑对接他们的可变薪酬。一旦“someValue”包含非法字符,你就会蠢蠢欲动。然后您的代码开始如下所示:

xml = "<rootnode>"
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>"
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>"
xml += "</rootnode>"

然后有些事情仍在爆发,所以天才工程师会尝试:

xml = "<rootnode>"
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>"
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>"
xml += "</rootnode>"

xml = XmlEscape(xml)

注意:在处理界面时,这个过程实际上发生了两次。

在您知道之前,您的电汇流最终看起来像

&amp;lt;rootnode>HELP<rootnode>
&amp;lt;rootnode&gt;ME&amp;lt;rootnode&amp;gt;

内容:

请使用图书馆。 k thx bye。

答案 2 :(得分:0)

我们可以使用tinyXml2并使我们的工作更轻松,只需包含tinyxml2的header和cpp文件,你几乎完成了解析和编写。请在

找到文档和手册

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