我有需要解析的XML文档和/或需要构建XML文档并将它们写入文本(文件或内存)。既然c++标准库没有这样的库,我应该使用什么?

注意:这是一个明确的,c++ - faq风格的问题。所以,是的,它是其他东西的复制品。我没有简单地盗用那些问题,因为他们往往会问一些更具体的问题。这个问题比较一般。


当前回答

把我的也放上去。

http://www.codeproject.com/Articles/998388/XMLplusplus-version-The-Cplusplus-update-of-my-XML

没有XML验证特性,但是速度很快。

其他回答

在secure Globe, Inc.中,我们使用rapidxml。我们尝试了所有其他的,但rapidxml似乎是我们的最佳选择。

这里有一个例子:

 rapidxml::xml_document<char> doc;
    doc.parse<0>(xmlData);
    rapidxml::xml_node<char>* root = doc.first_node();

    rapidxml::xml_node<char>* node_account = 0;
    if (GetNodeByElementName(root, "Account", &node_account) == true)
    {
        rapidxml::xml_node<char>* node_default = 0;
        if (GetNodeByElementName(node_account, "default", &node_default) == true)
        {
            swprintf(result, 100, L"%hs", node_default->value());
            free(xmlData);
            return true;
        }
    }
    free(xmlData);

把我的也放上去。

http://www.codeproject.com/Articles/998388/XMLplusplus-version-The-Cplusplus-update-of-my-XML

没有XML验证特性,但是速度很快。

那么,好吧。我已经创建了一个新的列表,因为没有一个不满足我的需求。

好处:

拉解析器流式API,即解析器就像迭代器没有回调或DOM树。即将XML读取到数据结构 异常和RTTI可以通过编译器选项关闭,错误处理可以通过std::error_code完成 限制内存使用,支持大文件(用100mib XMark文件进行测试,速度取决于硬件)。这里有一个有限的COLLADA格式3D模型加载的例子 UNICODE支持,并自动检测输入源编码

项目回家

还有一种处理XML的方法可能需要考虑,称为XML 数据绑定。特别是如果您已经有了XML词汇表的正式规范,例如在XML Schema中。

XML数据绑定允许您使用XML,而无需实际执行任何XML解析或序列化。数据绑定编译器自动生成所有低级代码,并将解析后的数据表示为与应用程序域对应的c++类。然后通过调用函数和c++类型(int、double等)来处理这些数据,而不是比较字符串和解析文本(这是使用低级XML访问api(如DOM或SAX)所做的事情)。

例如,我写的一个开源XML数据绑定实现, CodeSynthesis XSD和,对于a 轻量级,无依赖版本,CodeSynthesis XSD / e。

关于Expat的另一个注意事项:它值得用于嵌入式系统工作。然而,你可能在网上找到的文档是古老的和错误的。源代码实际上有相当完整的函数级注释,但需要仔细阅读才能理解。