2010-08-11 39 views
12

這是一個新手問題。我試圖將一些對象序列化爲XML,但是生成的XML包含boost序列化簽名,版本信息,class id等等。我不需要。有沒有辦法擺脫他們沒有後處理XML消息?使用boost :: serialization序列化爲XML

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

我會序列化這些消息字符串,不過,將它們發送到預期的消息,看起來像這樣的系統。

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

有沒有一種方法來序列化沒有簽名的XML?

回答

1

這不是什麼boost::serialization應該用於。如果您想要生成特定類型的XML,最好使用像Xerces這樣的XML生成器(是的,它在任何地方都會說「解析器」,但它也會寫XML)。

+0

標誌你知道使用的Xerces生成的輸出@navigator想要的類型的例子嗎? – Jeff 2014-05-29 16:11:20

+1

你爲什麼說這不是預期的用法? 文檔[不贊同您](http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html):«'除了實現持久性外,此庫在其他情況下也很有用。最明顯的例子就是將數據編組傳輸到另一個系統。「» – 2016-05-09 23:41:24

15

no_header消除了標題行

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

下面的宏消除屬性

BOOST_CLASS_IMPLEMENTATION(Test, object_serializable) 
相關問題