【问题标题】:Using XML files to store data使用 XML 文件存储数据
【发布时间】:2011-06-04 03:09:38
【问题描述】:

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

【问题讨论】:

    标签: c++ xml


    【解决方案1】:

    您可以使用字符串操作函数,因为这就是 XML 库最终使用的函数。 XML 文档只是一种特殊格式的长字符串。但是,除非您对 XML 有很多了解(以及什么是有效的 XML,什么是无效的 XML),否则现在使用 XML 解析器/序列化器将为您以后省去很多麻烦。 XML 存在细微差别(命名空间、转义序列等),这些细微差别会导致不知道如何正确处理它们的本土代码出现问题。当您处理完所有特殊情况时,您实际上已经编写了一个半途而废的 XML 解析器。

    【讨论】:

      【解决方案2】:

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

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

      你叫什么名字?:bob&"

      !解析 XML 文档时出错!

      我们遇到过很多次,如果我们的任何工程师检查类似:

      xml = "" xml += "" + someValue + "" xml += ""

      我们将认真考虑对接他们的浮动薪酬。一旦“someValue”包含非法字符,您就会被淘汰。然后你的代码开始看起来像这样:

      xml = "" xml += "" + XmlEscape(someValue) + "" xml += "" + XmlEscape(someValue) + "" xml += ""

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

      xml = "" xml += "" + XmlEscape(someValue) + "" xml += "" + XmlEscape(someValue) + "" xml += "" xml = XmlEscape(xml)

      注意:这个过程实际上在我身上发生过两次,同时在一个界面上工作。

      在不知不觉中,您通过网络的流最终看起来像

      <rootnode>帮助 <根节点>ME<根节点>

      总结:

      请使用图书馆。 k thx 再见。

      【讨论】:

      • XML 使用什么库?是否有某种内置或标准库?
      • 在 Java 中它们是库,在 Ruby 中它们是宝石。假设是 Java,请继续访问 apache 网站并查看他们的工具。
      【解决方案3】:

      我们可以使用tinyXml2,让我们的工作更轻松,只需要包含tinyxml2的头文件和cpp文件,你就差不多完成了解析和编写。请在

      找到文档和手册

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

      【讨论】:

        猜你喜欢
        • 2013-01-05
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        相关资源
        最近更新 更多