用于在C ++程序中编写* XML文件的库是什么?

时间:2011-12-29 21:49:03

标签: c++ xml

在C ++程序中用什么库来编写 XML文件?

我发现在CodeProject中发布了两个类

但想检查是否有比这些更多的标准选项。我只关心写作,而不是解析XML。

7 个答案:

答案 0 :(得分:4)

我尝试了不同的库,最后决定使用TinyXml。它紧凑,快速,免费(zlib许可证),非常易于使用。

答案 1 :(得分:3)

问题:您是否要更新XML文件?因为虽然听起来只是更多的写作,但使用XML仍需要解析器。

虽然xerces很大且臃肿,但它完全符合标准且基于DOM。如果您需要跨平台或更改语言,总会有一个基于DOM的库,无论您可能移动到何种语言/平台,因此了解基于DOM的解析/编写是如何工作的。如果您打算使用XML,也可以正确使用它。

完全避免使用XML当然是最佳选择。但除此之外,我会选择xerces。

答案 2 :(得分:1)

您可以使用Xerces-C ++,这是一个由Apache基金会编写的库。该库允许读取,写入和操作XML文件。

链接:http://xerces.apache.org/xerces-c/

答案 3 :(得分:0)

就我的目的而言,PugiXML非常好用

http://pugixml.org/

我之所以认为这么好的原因是因为它只是3个文件,配置标题,标题和实际来源。

但正如你所说的,你对解析不感兴趣,那么为什么还要使用特殊的类来编写XML呢?虽然你的类可能太复杂了,但我发现很容易做的就是使用std::ostream,然后用这种方式编写符合标准的XML。例如,假设我有一个代表Company的类,它是Employee个对象的集合,只需在每个CompanyEmployee类中创建一个方法像下面的psuedocode

Company::writeXML(std::ostream& out){
    out << "<company>" << std::endl;
    BOOST_FOREACH(Employee e, employees){
        e.writeXML(out);
    }
    out << "</company>" << std::endl;
}

为了让它更容易,您的Employee的writeXML函数可以声明为virtual,这样您就可以拥有一个特定的输出,例如CEOPresidentJanitor或者子类应该是什么。

答案 4 :(得分:0)

我多年来一直在使用开源libxml2库,对我来说很有用。

答案 5 :(得分:0)

我遇到了同样的问题并结束rolling my own solution。它是作为单个头文件实现的,您可以将其放入项目中:xml_writer.h

它带有一组unit tests,也可作为文档。

答案 6 :(得分:-1)

滚动你自己的

我一直处于类似情况。我有一个需要生成JSON的程序。我们采取了两种方式。首先我们尝试了jsoncpp,但最后我只是通过std::ofstream直接生成了JSON。

之后我们通过验证器运行生成的JSON来捕获任何语法错误。有一些,但他们很容易找到和纠正。

如果我再次这样做,我肯定会再次自己动手。出乎意料的是,使用std::ofstream时代码较少。另外,我们不必使用/学习新的API。它更容易编写,更易于维护。