blob: 8fd69d0858f3f89bb91823ca2c016a5bf97e144c (
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
|
This example shows how to customize the anyType XML Schema built-in
type to implement preservation of comments stored in XML documents.
Because anyType is a base type for every generated type, you can use
this technique to implement custom functionality that spans the
entire type system. For more information on the C++/Tree mapping
customization see the C++/Tree Mapping Customization Guide[2].
[2] http://wiki.codesynthesis.com/Tree/Customization_guide
The example consists of the following files:
people.xsd
XML Schema definition for a simple person record vocabulary.
people.xml
Sample XML instance document.
xml-schema.hxx
C++ types for XML Schema built-in types. This header file is generated
by XSD using the --generate-xml-schema option. The --custom-type option
is also used to customize the xsd:anyType type.
people.hxx
people.ixx
people.cxx
C++ types that represent the person record vocabulary, a set of
parsing functions that convert XML instance documents to a tree-like
in-memory object model, and a set of serialization functions that
convert the object model back to XML. These are generated by XSD
from people.xsd with the --extern-xml-schema option in order to
include xml-schema.hxx.
xml-schema-custom.hxx
Header file which defines our own xml_schema::type class. It is
included at the end of xml-schema.hxx using the --hxx-epilogue
option.
xml-schema-custom.cxx
Source file which contains the implementation of our xml_schema:type
class.
dom-parse.hxx
dom-parse.cxx
Definition and implementation of the parse() function that
parses an XML document to a DOM document while preserving
XML comments.
driver.cxx
Driver for the example. It first calls the above parse() function
to parse the input file to a DOM document. It then parses the DOM
document to the object model and performs a number of modifications
on this object model. Finally, it serializes the modified object
model back to XML, including XML comments.
To run the example on the sample XML instance document simply execute:
$ ./driver people.xml
|