2012-05-06 16 views
6

Sto cercando un modo semplice per trasformare in C++ un oggetto nella rappresentazione stringa XML, in questo modo potrei comunicare con un server.C++ Object to XML per la comunicazione

Per esempio, diciamo che ho un oggetto:

class A{ 
    string data1; 
    string data2; 
    string dataN; 
    list<B> bList; 
} 

class B{ 
    string moreData; 
} 

Vorrei il seguente codice XML-rappresentazione: (Si supponga che ho creato un caso A e ha due istanze di B)

<A> 
    <data1>content</data1> 
    <data2>content</data2> 
    <dataN>content</dataN> 
    <B> 
     <moreData>content</moreData> 
    </B>  
    <B> 
     <moreData>content</moreData> 
    </B> 
</A> 
+2

http://stackoverflow.com/questions/234724/how-to-serialize-in-c – m0skit0

+0

Qual è la domanda? – Starkey

+0

@ m0skit0 è un'ottima libreria. Ho preso l'esempio [boost XML] (http://www.boost.org/doc/libs/1_36_0/libs/serialization/example/demo_xml.cpp) ma genera un XML con più informazioni che voglio (ad esempio metadati corrispondente agli oggetti e così via) c'è un modo per produrre un output più semplice come quello che ho postato nella mia domanda? –

risposta

3

Ciò che viene descritto è denominato XML Data Binding. Esistono numerosi prodotti che generano il codice C++ da e XSD o DTD, dare un'occhiata a http://www.xmldatabinding.org/ per un elenco e http://www.rpbourret.com/xml/XMLDataBinding.htm per ulteriori informazioni.

Dai un'occhiata anche a questo XML Data Binding example for C++, mostra lo schema di esempio di esempio e il codice generato.

Se i tuoi schemi sono piuttosto semplici e hai la possibilità di sintonizzarli sul generatore, probabilmente ci sono alcuni progetti open source che faranno il lavoro. Se si sta vincolando a uno standard XML, si corre velocemente contro le limitazioni della maggior parte dei generatori. Il generatore Liquid XML gestisce praticamente tutti gli standard XSD, ma è necessario pagarlo.

2

Quindi, non esiste un modo standard perché, in poche parole, perché non c'è modo di serializzare i puntatori e cose del genere. Sarà sempre l'applicazione specifica.

Tuttavia, è possibile creare la propria classe e serializzare come si desidera.

Come per i parser xml, hai provato this one? È estremamente semplice, efficiente e facile da imparare. Ho fatto praticamente tutto con esso. Puoi persino chiedere una licenza commerciale.

3

Non esiste una soluzione universale per questo problema in C++, tuttavia esistono molte implementazioni ad hoc.

Questa domanda ha alcuni link notevoli e how-to: How to implement serialization in C++