summaryrefslogtreecommitdiff
path: root/xsd-examples/cxx/parser/performance/README
blob: eda0b162a653690765f80af8ccecb21df73629bf (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
69
70
71
72
73
74
This example measures the performance of XML parsing in the C++/Parser
mapping. It also shows how to structure your code to achieve the maximum
performance for this operation.

The example consists of the following files:

test.xsd
  XML Schema which describes the test vocabulary.

test-50k.xml
  Test XML document.

gen.cxx
  Program to generate a test document of desired size.

  To compile and link this program we can use the following commands (replace
  'c++' with your C++ compiler name):

  c++ -c gen.cxx
  c++ -o gen gen.o

  To generate the test document execute, for example:

  ./gen 633 test-100k.xml

time.hxx
time.cxx
  Class definition that represents time.

test-pskel.hxx
test-pskel.ixx
test-pskel.cxx
  Parser skeletons generated by the XSD compiler from test.xsd using the
  following command line:

  xsd cxx-parser --skel-file-suffix=-xerces-pskel test.xsd

  Or if using Expat instead of Xerces-C++ as the underlying XML parser:

  xsd cxx-parser --xml-parser=expat --skel-file-suffix=-expat-pskel test.xsd

driver.cxx
  Driver for the example. It first parses the command line arguments
  and reads the entire document into a memory buffer. It then creates
  a SAX parser and pre-parses and caches the schema if validation is
  enabled (Xerces-C++ only). Finally, it runs the performance
  measurement loop which on each iteration parses the XML document
  from the in-memory buffer.

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++ -c test-xerces-pskel.cxx
c++ -c time.cxx
c++ -DXERCES_PARSER -c driver.cxx
c++ -o driver driver.o time.o test-xerces-pskel.o -lxerces-c

Or if using Expat as the underlying XML parser:

c++ -c test-expat-pskel.cxx
c++ -c time.cxx
c++ -c driver.cxx
c++ -o driver driver.o time.o test-expat-pskel.o -lexpat

To run the example on a test XML document execute:

./driver test-50k.xml

The -v option can be used to turn on validation in the underlying XML
parser (only makes sense for Xerces-C++, off by default). The -i option
can be used to specify the number of parsing iterations (1000 by default).
For example:

./driver -v -i 100 test-50k.xml