This example shows how to use XML Schema polymorphism features such as xsi:type attributes and substitution groups in the C++/Tree mapping. The example consists of the following files: supermen.xsd XML Schema which describes the "supermen" instance documents. supermen.xml Sample XML instance document. supermen.hxx supermen.cxx C++ types that represent the given 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 supermen.xsd. Note also that we use the --generate-polymorphic command line option and that we don't need to use --polymorphic-type to explicitly mark types as polymorphic because this is automatically deduced by the XSD compiler from the substitution groups used in the supermen.xsd schema. driver.cxx Driver for the example. It first calls one of the parsing functions that constructs the object model from the input file. It then prints the content of the object model to STDERR. Finally, the driver serializes the object model back to XML. To run the example on the sample XML instance document simply execute: $ ./driver instance.xml