代码之家  ›  专栏  ›  技术社区  ›  Amir Rachum

如何用C++启动XML

  •  3
  • Amir Rachum  · 技术社区  · 14 年前

    (不确定这是否应该是CW,如果你认为应该的话,欢迎发表评论)。

    在我的工作场所,我们有许多不同的文件格式用于各种用途。这些文件格式中的大多数(如果不是全部的话)只是用纯文本编写的,没有一致性。我只是一个兼职的学生,我没有在生产中使用xml的经验,但在我看来,使用xml可以提高生产率,因为我们经常需要解析、检查和比较这些输出。

    所以我的问题是:假设我只能控制一个小应用程序及其输出(仅-输入也是其他应用程序中使用的格式),那么是否值得尝试将输出更改为基于xml的?如果是这样,那么C++中最有名的方法是什么(即XML解析器/作者等等)?另外,我是否也应该提供纯文本输出,以方便用户(也是程序员)习惯xml?我应该提供一个脚本来翻译xml明文吗?你在这方面有什么经验?

    谢谢。

    6 回复  |  直到 14 年前
        1
  •  12
  •   Patrick    14 年前

    不要因为是XML就使用XML。

    使用XML是因为:

    • 其他应用程序(只接受XML)将读取您的输出
    • 您希望使用XSL将数据转换为其他格式(例如转换为HTML)

    编辑:

    很好的个人经历:

    客户:

    我: 呃,好的,我会修改我的应用程序,这样它就可以读取XML了。

    同一客户(几天后): 您的应用程序必须能够读取固定宽度的文件,因为我们刚刚意识到我们的大型机不能生成XML。

        2
  •  7
  •   Poni    14 年前

    TinyXML 这是非常容易使用和开始。检查其 documentation

    至于编写,如果您的XML文件不复杂,您可以使用字符串对象手动构建它们。”对我来说“不复杂”意味着你最多只能存储文本。

    Xerces 比TinyXML重。我还没有用过它,我在生产中见过它,它确实提供了它。

        3
  •  3
  •   Jonathan Sternberg    14 年前

    您可以尝试使用boost::property\u tree类。

    http://www.boost.org/doc/libs/1_43_0/doc/html/property_tree.html
    http://www.boost.org/doc/libs/1_43_0/doc/html/boost_propertytree/tutorial.html
    http://www.boost.org/doc/libs/1_43_0/doc/html/boost_propertytree/parsers.html#boost_propertytree.parsers.xml_parser

    但是,如果您想要这种能力,就应该避免使用xml属性。要使用属性,必须查看键,它不会在文件类型之间传输(尽管可以手动创建自己的子节点)。

    尽管使用TinyXML可能更好。我以前在我工作过的几个项目中看到过它的使用,但是没有任何经验。

        4
  •  1
  •   Boris Kolpackov    14 年前

    在应用程序中处理XML的另一种方法是使用数据绑定工具,例如 CodeSynthesis XSD . 这样的工具将生成C++类,隐藏了解析/序列化XML的所有血淋淋的细节——所有你看到的都是对应于XML词汇表和函数的对象,这些函数可以调用/设置数据,例如:

    Person p = person ("person.xml");
    
    cout << p.name ();
    
    p.name ("John");
    p.age (30);
    
    ofstream ofs ("person.xml");
    person (ofs, p);
    
        5
  •  0
  •   Owen S.    7 年前
        6
  •  0
  •   Boris Kolpackov    14 年前

    顺便说一句,在决定使用XML解析器之前,您可能需要确保它能够真正解析所有XML文档,而不仅仅是本文中讨论的“简单”文档:

    Are you using a real XML parser?