This example shows how to handle XML vocabularies with multiple root elements using the Embedded 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 XSD/e from protocol.xsd and protocol.map. protocol-pimpl-mixin.hxx protocol-pimpl-mixin.cxx protocol-pimpl-tiein.hxx protocol-pimpl-tiein.cxx Parser implementations (using either mixin or tiein parser reuse style) 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 one of 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 run the example on the sample XML request documents simply execute: $ ./driver balance.xml $ ./driver withdraw.xml $ ./driver deposit.xml The example reads from STDIN if input file is not specified: $ ./driver