14

これは初心者の質問です。いくつかのオブジェクトを XML にシリアライズしようとしていますが、結果の XML にはブースト シリアライゼーション シグネチャ、バージョン情報、クラス ID などが含まれています。私は必要ありません。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をシリアライズする方法はありますか?

4

2 に答える 2

17

フラグ no_header は見出し行を削除します

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

次のマクロは属性を削除します

BOOST_CLASS_IMPLEMENTATION(Test, object_serializable)
于 2012-12-07T08:29:37.717 に答える
2

それは何boost::serializationのために使われるべきではありません。特定の種類の XML を生成する場合は、 Xercesなどの XML ジェネレーターを使用することをお勧めします(はい、どこにでも「パーサー」と書かれていますが、XML も書き込みます)。

于 2010-08-13T13:01:01.343 に答える