У меня есть ряд структур, которые выглядят так:
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-файл, не передавая вручную каждую переменную-член из структура С? то, что я хочу, будет выглядеть так:
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>
Заранее спасибо.
Вы можете использовать boost :: serialization, чтобы сделать что-то вроде того, что вы просили …
http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/tutorial.html
он имеет широкие возможности для обработки XML (и других форматов) на странице выше:
В этом уроке мы использовали определенный класс архива —
text_oarchive для сохранения и text_iarchive для загрузки. текстовые архивы
визуализировать данные в виде текста и переносимы между платформами. В дополнение к
текстовые архивы, библиотека включает в себя класс архива для собственного двоичного файла
данные и данные в формате XML. Интерфейсы для всех архивных классов все
идентичны. Как только сериализация была определена для класса, этот класс
может быть сериализован в любой тип архива.
Изменить: вы будете обрабатывать объекты и сериализовать их, а не манипулировать XML напрямую для изменения значений.
Других решений пока нет …