2010-08-11 13 views
12

Dies ist eine neue Frage. Ich versuche, einige Objekte in XML zu serialisieren, aber das resultierende XML enthält eine Boost-Serialisierungssignatur, Versionsinformation, Klassen-ID, ... usw. das brauche ich nicht. Gibt es eine Möglichkeit, sie loszuwerden, ohne die XML-Nachricht nachbearbeiten zu müssen?Serialisieren zu XML mit Boost :: Serialisierung

#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; 
} 

Ergebnisse in:

<?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> 

werde ich diese Nachrichten Saiten Serialisierung, aber, und sie auf Systeme zu senden, dass eine Nachricht erwarten wie folgt aussehen.

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

Gibt es eine Möglichkeit, XML ohne die Signatur zu serialisieren?

Antwort

1

Das ist nicht, was boost::serialization für verwendet werden sollte. Wenn Sie eine bestimmte Art von XML generieren möchten, verwenden Sie besser einen XML-Generator wie Xerces (ja, es heißt überall "Parser", aber es wird auch XML schreiben).

+0

Kennen Sie ein Beispiel eliminiert eliminiert Xerces der Verwendung der Art der Ausgabe @navigator will zu generieren? – Jeff

+1

Warum sagen Sie, dass das nicht beabsichtigt ist? Die Dokumente [stimmen nicht mit Ihnen überein] (http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html): «Diese Bibliothek wird in anderen Kontexten neben der Implementierung von Persistenz nützlich sein . Der offensichtlichste Fall ist die Übertragung von Daten zur Übertragung an ein anderes System. "» –

15

die Flagge no_header die Kopfzeilen

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

das folgende Makro, um die Attribute

BOOST_CLASS_IMPLEMENTATION(Test, object_serializable) 
Verwandte Themen