如何最好地保存XML文件

时间:2009-11-24 01:32:02

标签: c++ xml language-agnostic tinyxml

我有一堆类,每个类都使用TinyXML从XML文件中读取它们的值。

我已经这样做,所以一切都在内存中,我的用户正在使用该应用程序并进行更改。如果用户按下Save,我需要遍历我的对象并调用Save()函数,该函数会写出XML文件。我应该从头开始以编程方式重建XML文件并将其写出来吗?或者我应该使用与我用来读取文件相同的TiXmlHandle,修改它然后将其写回来?这样,保留了原始订单。如果我重新创建XML,那么原始的顺序将会改变。

我希望用户能够手动修改XML,所以我认为他们手动更改它会很奇怪,只是在保存时重新调整它。我能正确理解我的选择吗?

之前从未使用过TinyXML,或者就此而言使用过XML。

2 个答案:

答案 0 :(得分:1)

读完XML输入后,我会处理读取句柄。

要将它们写回来,您通常会在父文档或主文档类型对象中使用writeXML()方法,然后在设计中的每个对象中调用writeXML()方法。

PS。拥有不同的XML读写库并不常见 PPS。如果您担心XMl文档中的顺序无法从对象层次结构中强制执行 - 那么您的错误设计就会出错。

答案 1 :(得分:1)

这第一部分不是你问题的直接答案,但我会继续你的句子“我以前从未使用过XML。”由于目前计算机中普遍存在XML,因此值得花些时间来理解XML的工作原理。对于直接参考,我推荐Harold和Means的“坚果壳中的XML”。它解释了XML,模式(它确切地定义了传入的XML必须是什么样子),XPath(如何导航节点以获得所需的数据),XQuery,XSLT,命名空间等。

真正能帮到你的是概念,为此你可能想要一本不同的书(对不起,我没有人推荐。)重要的是要知道为什么你应该以正确的方式使用XML,以及不仅仅把它想象成一个美化的.INI文件。为什么DOM概念很普遍。是否应该使用SAX。

可能最需要学习的东西是XML模式(XSD)。虽然它有时看起来有点过分,但您应该强烈考虑根据其模式验证XML(这是对完整XML解析器(如xerces)的单方法调用。)请记住,这是2009年,您的程序在计算机上运行很多内存,它可以真正,快速地完成大部分内容;所以知道你的数据是好的是完全值得的。一旦你理解了模式,我就会建议学习如何对它们进行版本化。这在处理程序存储时尤其重要,因为您可以让程序理解保存文件的先前版本并自动使用或升级它们。

要更直接地回答您的直接问题,请使用TinyXML(或您选择的任何解析器)进行编写。当你手头有这个工具时,不要重新发明输出轮。