diff options
Diffstat (limited to 'xsd-examples/cxx/parser/multiroot/README')
-rw-r--r-- | xsd-examples/cxx/parser/multiroot/README | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/xsd-examples/cxx/parser/multiroot/README b/xsd-examples/cxx/parser/multiroot/README new file mode 100644 index 0000000..410784d --- /dev/null +++ b/xsd-examples/cxx/parser/multiroot/README @@ -0,0 +1,68 @@ +This example shows how to handle XML vocabularies with multiple +root elements using the C++/Parser mapping. + +The example consists of the following files: + +protocol.xsd + XML Schema which defines a simple bank account protocol with + requests such as withdraw and deposit. + +balance.xml +withdraw.xml +deposit.xml + Sample XML instances for the protocol requests. + +protocol.hxx + C++ types that describe the protocol requests. These are + hand-written. + +protocol.map + Type map. It maps XML Schema types defined in protocol.xsd + to the C++ types defined in protocol.hxx. + +protocol-pskel.hxx +protocol-pskel.cxx + Parser skeletons generated by the XSD compiler from protocol.xsd and + protocol.map using the following command line: + + xsd cxx-parser --type-map=protocol.map protocol.xsd + + Or if using Expat instead of Xerces-C++ as the underlying XML parser: + + xsd cxx-parser --xml-parser=expat --type-map=protocol.map protocol.xsd + +protocol-pimpl.hxx +protocol-pimpl.cxx + Parser implementations that construct the custom object + model from an XML instance using the types from protocol.hxx. + These are hand-written implementations of the parser skeletons + defined in protocol-pskel.hxx. + +driver.cxx + Driver for the example. It implements a custom document parser + that determines which request is being parsed and uses the + corresponding parser implementation. The document parser + intentionally does not support the deposit request to show + how to handle unknown documents. The driver first constructs + a parser instance from all the individual parsers found in + protocol-pimpl.hxx. In then invokes this parser instance to + parse the input file and produce the in-memory object model. + Finally, it prints the contents of the object model to STDERR. + +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 protocol-pskel.cxx +c++ -c protocol-pimpl.cxx +c++ -c driver.cxx +c++ -o driver driver.o protocol-pskel.o protocol-pimpl.o -lxerces-c + +Or if using Expat as the underlying XML parser: + +c++ -o driver driver.o protocol-pskel.o protocol-pimpl.o -lexpat + +To run the example on the sample XML request documents execute: + +./driver balance.xml +./driver withdraw.xml +./driver deposit.xml |