Xerces C++ - 加载,读取和保存,替代方案?

7 c++ xml linux xerces

我正在寻找一个教程来加载XML文件,读取它,更改它,最后用C++保存它.我正在使用Linux Ubuntu并尝试使用Xerces.谷歌和很多时间,我只能加载一个XML文件:

#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>

#include <iostream>

using namespace std;
using namespace xercesc;

int main (int argc, char* args[]) {

    try {
        XMLPlatformUtils::Initialize();
    }
    catch (const XMLException& toCatch) {
        char* message = XMLString::transcode(toCatch.getMessage());
        cout << "Error during initialization! :\n"
             << message << "\n";
        XMLString::release(&message);
        return 1;
    }

    XercesDOMParser* parser = new XercesDOMParser();
    parser->setValidationScheme(XercesDOMParser::Val_Always);
    parser->setDoNamespaces(true);    // optional

    ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
    parser->setErrorHandler(errHandler);

    const char* xmlFile = "demo.xml";

    try {
        parser->parse(xmlFile);
    }
    catch (const XMLException& toCatch) {
        char* message = XMLString::transcode(toCatch.getMessage());
        cout << "Exception message is: \n"
             << message << "\n";
        XMLString::release(&message);
        return -1;
    }
    catch (const DOMException& toCatch) {
        char* message = XMLString::transcode(toCatch.msg);
        cout << "Exception message is: \n"
             << message << "\n";
        XMLString::release(&message);
        return -1;
    }
    catch (...) {
        cout << "Unexpected Exception \n" ;
        return -1;
    }

    DOMNode* docRootNode;
//  DOMNode* aNode;
    DOMDocument* doc;
    doc = parser->getDocument();
    docRootNode = doc->getDocumentElement();
    cout << docRootNode->getAttributes() << endl; //returns Hex



    delete parser;
    delete errHandler;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何读取操作XML文件并最终保存?有替代图书馆吗?(我试过tinyxml但文件返回错误,当我想编译它时)

Tro*_*nic 1

LibXML++ 似乎是 C++ 的最佳选择。从功能角度来看,它非常完整,包括 XPath、字符集转换(由 Glibmm 提供)以及 XML 库中您期望的所有内容。它使用传统的 DOM 和 SAX API,这是否有利取决于您向谁询问。一个可能的问题是该库的依赖性非常重(由于使用了 Glibmm)。尽管如此,它似乎是 C++ 中唯一合适的 XML 库。

http://libxmlplusplus.sourceforge.net/docs/manual/html/index.html

TinyXML 不根据规范解析 XML,因此我建议不要使用它,即使它适用于简单文档。