2010-08-11 11 views
12

का उपयोग कर एक्सएमएल को सीरियल करें यह एक नौसिखिया सवाल है। मैं एक्सएमएल में कुछ ऑब्जेक्ट्स को क्रमबद्ध करने की कोशिश कर रहा हूं, लेकिन परिणामी एक्सएमएल में एक बूस्ट सीरियलाइजेशन हस्ताक्षर, संस्करण जानकारी, कक्षा आईडी, आदि शामिल हैं। मुझे जरूरत नहीं है। क्या एक्सएमएल संदेश पोस्ट-प्रोसेसिंग के बिना उनसे छुटकारा पाने का कोई तरीका है?बूस्ट :: serialization

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

परिणामों में:

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

मैं, तार को ये संदेश serializing जाएगा, हालांकि, और उन्हें प्रणाली है कि संदेश इस तरह देखने के लिए उम्मीद के लिए भेजने से।

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

क्या हस्ताक्षर के बिना xml क्रमबद्ध करने का कोई तरीका है?

उत्तर

1

यह नहीं है कि boost::serialization का उपयोग नहीं किया जाना चाहिए। यदि आप एक विशिष्ट प्रकार के एक्सएमएल उत्पन्न करना चाहते हैं, तो Xerces जैसे एक्सएमएल जनरेटर का बेहतर उपयोग करें (हाँ, यह हर जगह "पार्सर" कहता है, लेकिन यह एक्सएमएल भी लिखता है)।

+0

समाप्त समाप्त आप उत्पादन @navigator चाहता है के प्रकार उत्पन्न करने के लिए Xerces उपयोग का एक उदाहरण के बारे में पता है? – Jeff

+1

आप क्यों कहते हैं कि इच्छित उद्देश्य नहीं है? दस्तावेज़ [आपसे असहमत] (http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html): «यह लाइब्रेरी दृढ़ता को लागू करने के अलावा अन्य संदर्भों में उपयोगी होगी । सबसे स्पष्ट मामला यह है कि किसी अन्य प्रणाली में संचरण के लिए डेटा को मार्शल करना। '» –

15

झंडा no_header शीर्षक लाइनों

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

निम्नलिखित मैक्रो विशेषताओं

BOOST_CLASS_IMPLEMENTATION(Test, object_serializable) 
संबंधित मुद्दे