如果我要使用XML文件存储一些信息,我是否需要一个读/写数据的XML Parser?我可以使用字符串操作函数吗?为什么不呢?
答案 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)
注意:在处理界面时,这个过程实际上发生了两次。
在您知道之前,您的电汇流最终看起来像
&lt;rootnode>HELP<rootnode> &lt;rootnode>ME&lt;rootnode&gt;
内容:
请使用图书馆。 k thx bye。
答案 2 :(得分:0)
我们可以使用tinyXml2并使我们的工作更轻松,只需包含tinyxml2的header和cpp文件,你几乎完成了解析和编写。请在
找到文档和手册