2010-08-11 9 views
12

Ceci est une question de débutant. Je suis en train de sérialisation des objets XML, mais le XML résultant contient une signature de sérialisation boost, les informations de version, id classe, ... etc. que je n'ai pas besoin. Y at-il un moyen de se débarrasser d'eux sans post-traitement du message xml?sérialisation XML en utilisant boost :: sérialisation

#include <fstream> 
#include <iostream> 
#include <boost/archive/xml_iarchive.hpp> 
#include <boost/archive/xml_oarchive.hpp> 

using namespace std; 

class Test { 
private:  
    friend class boost::serialization::access; 
    template<class Archive> void serialize(Archive & ar, 
      const unsigned int version) { 
     ar & BOOST_SERIALIZATION_NVP(a); 
     ar & BOOST_SERIALIZATION_NVP(b); 
     ar & BOOST_SERIALIZATION_NVP(c); 
    } 

    int a; 
    int b; 
    float c; 
public: 
    inline Test(int a, int b, float c) { 
     this->a = a; 
     this->b = b; 
     this->c = c; 
    } 
}; 

int main() { 
    std::ofstream ofs("filename.xml"); 

    Test* test = new Test(1, 2, 3.3); 

    boost::archive::xml_oarchive oa(ofs); 
    oa << BOOST_SERIALIZATION_NVP(test); 

    return 0; 
} 

résultats dans:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    <!DOCTYPE boost_serialization (View Source for full doctype...)> 
    <boost_serialization signature="serialization::archive" version="6"> 
    <test class_id="0" tracking_level="1" version="0" object_id="_0"> 
    <a>1</a> 
    <b>2</b> 
    <c>3.3</c> 
    </test> 
    </boost_serialization> 

je vais être sérialisation ces messages à des chaînes, cependant, et de les envoyer à des systèmes qui attendent un message à ressembler à ceci.

<test> 
    <a>1</a> 
    <b>2</b> 
    <c>3.3</c> 
    </test> 

Existe-t-il un moyen de sérialiser XML sans la signature?

Répondre

1

Ce n'est pas ce que boost::serialization doit être utilisé pour. Si vous cherchez à générer un type spécifique de XML, mieux utiliser un générateur XML comme Xerces (oui, il est dit « analyseur » partout, mais il va également écrire XML).

+0

Est-ce que vous connaissez un exemple d'utilisation Xerces pour générer le type de @navigator de sortie veut? – Jeff

+1

Pourquoi dites-vous que ce n'est pas l'usage prévu? Les documents [en désaccord avec vous] (http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html): «' Cette bibliothèque sera utile dans d'autres contextes en dehors de la mise en œuvre persistance . Le cas le plus évident est celui de la transmission des données pour transmission à un autre système. »» –

15

le drapeau no_header élimine la rubrique lignes

unsigned int flags = boost::archive::no_header; 
boost::archive::xml_oarchive oa(ofs, flags); 

la macro suivante supprime les attributs

BOOST_CLASS_IMPLEMENTATION(Test, object_serializable)