C++ 中的动态 XML 代码生成

发布于 2024-10-30 05:20:29 字数 1660 浏览 1 评论 0原文

我想将我自己的类的一些 C++ 对象转换为 XML 代码。我猜想有几个库提供了 C++ 到 XML 的映射,但我希望保持库开销简单并制作一些我自己的东西。

生成 XML 构建的合适方法是什么?在 Java 中,有一些注释可用于动态生成 XML。也许是模板机制?

到目前为止我正在使用 TinyXML。我真的很喜欢使用它。

这是一个我希望生成的示例:

std::string XMLBuilder::buildThreadInformation(vector<threadinfo> threadinfos) {
TiXmlDocument document;
TiXmlDeclaration *declaration = new TiXmlDeclaration("1.0", "", "");

TiXmlElement *messageWrapElement = new TiXmlElement("message");
TiXmlElement *threadsElement = new TiXmlElement("threads");
messageWrapElement->LinkEndChild(threadsElement);

std::string numberString;
for (vector<threadinfo>::const_iterator it = threadinfos.begin(); it
        != threadinfos.end(); ++it) {
    TiXmlElement *threadElement = new TiXmlElement("thread");
    threadsElement->LinkEndChild(threadElement);

    TiXmlElement *threadNumberElement = new TiXmlElement("number");
    threadElement->LinkEndChild(threadNumberElement);

    numberString = boost::lexical_cast<std::string>((*it).thread_number);
    TiXmlText *threadNumber = new TiXmlText(numberString.c_str());
    threadNumberElement->LinkEndChild(threadNumber);

    TiXmlElement *threadNameElement = new TiXmlElement("name");
    threadElement->LinkEndChild(threadNameElement);

    TiXmlText *threadName = new TiXmlText((*it).name.c_str());
    threadNameElement->LinkEndChild(threadName);
}

document.LinkEndChild(declaration);
document.LinkEndChild(messageWrapElement);

TiXmlPrinter printer;
document.Accept(&printer);

std::string result = printer.CStr();

return result;

}

类 threadinfo 将由 int 数字和 std::string 名称组成。

I would like to transform some C++ objects of classes of my own into XML code. I guess there are several libraries which provide C++ to XML-mapping, but I would like to keep the library overhead simple and craft something of my own.

What would be an appropriate approach to generate XML building? In Java there are annotations which could be use to dynamaically generate the XML. Maybe the template mechanism?

I am using TinyXML so far. I really enjoy using it.

Here is an example, which I would like to be generated:

std::string XMLBuilder::buildThreadInformation(vector<threadinfo> threadinfos) {
TiXmlDocument document;
TiXmlDeclaration *declaration = new TiXmlDeclaration("1.0", "", "");

TiXmlElement *messageWrapElement = new TiXmlElement("message");
TiXmlElement *threadsElement = new TiXmlElement("threads");
messageWrapElement->LinkEndChild(threadsElement);

std::string numberString;
for (vector<threadinfo>::const_iterator it = threadinfos.begin(); it
        != threadinfos.end(); ++it) {
    TiXmlElement *threadElement = new TiXmlElement("thread");
    threadsElement->LinkEndChild(threadElement);

    TiXmlElement *threadNumberElement = new TiXmlElement("number");
    threadElement->LinkEndChild(threadNumberElement);

    numberString = boost::lexical_cast<std::string>((*it).thread_number);
    TiXmlText *threadNumber = new TiXmlText(numberString.c_str());
    threadNumberElement->LinkEndChild(threadNumber);

    TiXmlElement *threadNameElement = new TiXmlElement("name");
    threadElement->LinkEndChild(threadNameElement);

    TiXmlText *threadName = new TiXmlText((*it).name.c_str());
    threadNameElement->LinkEndChild(threadName);
}

document.LinkEndChild(declaration);
document.LinkEndChild(messageWrapElement);

TiXmlPrinter printer;
document.Accept(&printer);

std::string result = printer.CStr();

return result;

}

The class threadinfo would consist of int number and std::string name.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

奶茶白久 2024-11-06 05:20:29

RapidXML 也非常易于使用,可以为您创建动态 xml。

RapidXML is also pretty easy to use and can create dynamic xml for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文