2011-04-04 8 views
1

Je voudrais transformer certains objets C++ de mes propres classes en code XML. Je suppose qu'il existe plusieurs bibliothèques qui fournissent le mappage C++ vers XML, mais je voudrais que la bibliothèque reste simple et que je puisse créer quelque chose de la mienne.Génération de code XML dynamique en C++

Quelle serait une approche appropriée pour générer du développement XML? En Java, il y a des annotations qui pourraient être utilisées pour générer dynamatiquement le XML. Peut-être le mécanisme de modèle? J'utilise TinyXML jusqu'à maintenant. J'aime vraiment l'utiliser.

est un exemple ici, que je voudrais être généré:

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; 

}

La ThreadInfo classe consisterait nombre int et std :: string name.

+0

Pourriez-vous expliquer votre problème et donner un petit exemple de ce que vous aimeriez faire? Ce n'est pas clair pour moi de votre question si vous essayez de sérialiser des objets en XML, écrire votre propre langage XML déclaratif comme XAML, ou quelque chose d'autre entièrement. – Nathanael

+0

@Nathanael: Vous avez raison. J'ai ajouté un exemple, j'espère que c'est assez petit. –

Répondre

0

RapidXML est également assez facile à utiliser et peut créer un fichier XML dynamique pour vous.