blob: 4f5ae9a3c076ef8dee947be68780b38948d50bd8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
This example shows how to save/load the object model to/from a custom
format using the Boost serialization library as an example. You will
need the Boost serialization library[1] installed in order to build
and run this example.
[1] http://www.boost.org
The example consists of the following files:
library.xsd
XML Schema which describes a library of books.
library.xml
Sample XML instance document.
boost-archive-extraction.hxx
boost-archive-insertion.hxx
Boost archive insertion and extraction operators for fundamental
types. You will need to provide a similar set of operators for
your own stream types.
library-prologue.hxx
Contains a number of #include directives that are inserted into
the generated code by the XSD compiler. The included files are:
boost/archive/text_oarchive.hpp, boost/archive/text_oarchive.hpp,
boost-archive-insertion.hxx, and boost-archive-insertion.hxx.
library.hxx
library.cxx
C++ types that represent the given vocabulary as well as Boost
archive insertion and extraction operations.
These files are generated by the XSD compiler from library.xsd
using the following command line:
xsd cxx-tree --generate-ostream \
--hxx-prologue-file=library-prologue.hxx \
--generate-insertion 'boost::archive::text_oarchive' \
--generate-extraction 'boost::archive::text_iarchive' \
library.xsd
The --hxx-prologue-file option is used to insert the contents of
the library-prologue.hxx file into the generated header file. The
--generate-insertion and --generate-extraction options are used to
generate the insertion and extraction operations for text_oarchive
and text_iarchive types.
driver.cxx
Driver for the example. It first calls one of the parsing functions
that constructs the object model from the input XML file. It then
saves the object model to text_oarchive and loads it back from
text_iarchive. Additionally, it prints the resulting text
representation as well as the content of the object model before
saving it to text_oarchive and after loading it from text_iarchive.
To compile and link the example manually from the command line we can use
the following commands (replace 'c++' with your C++ compiler name):
c++ -DXSD_CXX11 -c library.cxx
c++ -DXSD_CXX11 -c driver.cxx
c++ -o driver driver.o library.o -lboost_serialization -lxerces-c
Note that we need to define the XSD_CXX11 preprocessor macro since the
source code includes libxsd headers directly.
To run the example on the sample XML instance document execute:
./driver library.xml
|