1

我有许多看起来像这样的结构:

struct A
{
    long lValueA;
    BOOL bValueA;
    CString strValueA;
}; 
struct B
{
    long lValueB;
    BOOL bValueB;
    CString strValueB;
}; 
struct C
{
    A a;
    vector<B> vecB;
}; 

是否可以使用 TinyXML2 (或任何其他库)将其转换为 XML 文件,而无需从struct C手动传递每个成员变量?我想要的是这样的:

main()
{
  C c;
  // Some code to initialise member variable of struct C

  // pass object/structure to XML parser to get XML file.
  Some_XML_Library_Object.parse( c ); 
  Some_XML_Library_Object.SaveFile("FilePath/Name.xml");

  // Also it would be nice if we can update values in structure or class directly like this
  const char* XML_File_Path = "FilePath/Name.xml";
  Some_XML_Library_Object.updateValueOfStructureFromXML(&c,XML_File_Path)
}

XML 文件生成类似于以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<A>
    <lValueA>
        value
    </lValueA>

    <bValueA>
        value
    </bValueA>

    <strValueA>
        value
    </strValueA>
</A>

<B>
    <lValueB>
        value
    </lValueB>
      ...
      ...
</B>

提前致谢。

4

1 回答 1

1

您可以使用 boost::serialisation 来执行您所要求的操作...

http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/tutorial.html

它具有从上述页面处理 XML(和其他格式)的广泛功能:

在本教程中,我们使用了一个特定的存档类 - text_oarchive 用于保存和 text_iarchive 用于加载。文本档案将数据呈现为文本,并且可以跨平台移植。除了文本存档之外,该库还包括原生二进制数据和 xml 格式数据的存档类。所有归档类的接口都是相同的。一旦为一个类定义了序列化,就可以将该类序列化为任何类型的存档。

编辑:您将处理对象并将它们序列化,而不是直接操纵 XML 来更改值。

于 2013-03-26T09:21:52.140 回答