2010-08-11 32 views
12

Bu bir yeni kullanıcı sorudur. Bazı nesneleri XML'e serileştirmeye çalışıyorum, ancak sonuçta ortaya çıkan XML, bir yükseltme serileştirme imzası, sürüm bilgisi, sınıf kimliği, ... vb. ihtiyacım yok. Xml mesajını işleme koymadan bunlardan kurtulmanın bir yolu var mı? içindeBoost :: serialization kullanarak XML'e seri hale getirme

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

sonuçları:

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

Gerçi dizeleri Bu mesajları serileştirip bir mesaj şuna benzer bekliyoruz sistemlere onları göndereceğiz.

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

İmza olmadan xml serileştirmenin bir yolu var mı?

cevap

1

boost::serialization bunun için kullanılmamalıdır. Belirli bir XML türü oluşturmak istiyorsanız, Xerces gibi bir XML jeneratörü kullanın (evet, her yerde "ayrıştırıcı" yazıyor, ancak XML de yazacak).

+0

ortadan kaldırır ortadan kaldırır no_header bayrak çıkış @navigator istiyor türünü üretmek için Xerces kullanarak örnek biliyor musunuz? – Jeff

+1

Niçin bunun amaçlanan kullanım olmadığını söylüyorsunuz? Dokümanlar [sizinle aynı fikirde değil] (http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html): «' Bu kitaplık, kalıcılık uygulamasının yanı sıra başka bağlamlarda da yararlı olacaktır. . En bariz durum, başka bir sisteme aktarım için veri aktarma verisidir. –

15

başlığı hatları

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

aşağıdaki makro özelliklerini

BOOST_CLASS_IMPLEMENTATION(Test, object_serializable) 
İlgili konular