2010-08-11 38 views
12

Đây là câu hỏi mới. Tôi đang cố gắng serialize một số đối tượng để XML, nhưng kết quả XML có chứa một chữ ký serialization tăng cường, thông tin phiên bản, lớp id, ... vv. mà tôi không cần. Có cách nào để loại bỏ chúng mà không cần xử lý thông điệp xml không?Nối tiếp thành XML bằng cách sử dụng boost :: 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; 
} 

kết quả trong:

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

tôi sẽ được tuần tự hóa các thông báo để các chuỗi, mặc dù, và gửi chúng đến các hệ thống mong đợi một thông điệp tới trông như thế này.

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

Có cách nào để sắp xếp xml không có chữ ký không?

Trả lời

1

Đó không phải là những gì boost::serialization nên được sử dụng cho. Nếu bạn đang tìm cách tạo ra một loại XML cụ thể, tốt hơn hãy sử dụng trình tạo XML như Xerces (vâng, nó nói "trình phân tích cú pháp" ở mọi nơi, nhưng nó cũng sẽ viết XML).

+0

Bạn có biết một ví dụ của việc sử dụng Xerces để tạo ra các loại đầu ra @navigator muốn? – Jeff

+1

Tại sao bạn nói đó không phải là mục đích sử dụng? Tài liệu [không đồng ý với bạn] (http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html): «' Thư viện này sẽ hữu ích trong các ngữ cảnh khác ngoài việc triển khai kiên trì . Trường hợp rõ ràng nhất là dữ liệu marshalling để truyền sang hệ thống khác.' » –

15

cờ no_header loại bỏ các dòng tiêu đề

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

macro sau loại bỏ các thuộc tính

BOOST_CLASS_IMPLEMENTATION(Test, object_serializable) 
Các vấn đề liên quan