Я использую компилятор xsd в c ++ из кодсинтеза. Я собираю эти фрагменты XSD:
<xsd:complexType name="elementBaseType">
<xsd:sequence>
<xsd:element name="init" type="initElementType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="BUTTON_ELEMENT">
<xsd:complexContent>
<xsd:extension base="elementBaseType">
<xsd:sequence>
<xsd:element name="imageClicked" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
В моем c ++ — коде я могу получить всю информацию об элементе elementBaseType. Но мне также нужна информация от моего специализированного BUTTON_ELEMENT. Я зарегистрировал шаг разбора, и кажется, что конструктор BUTTON_ELEMENT никогда не вызывается. Однако для каждого BUTTON_ELEMENT в моем XML-файле вызывается конструктор elementBaseType.
Я что-то пропустил?
Я использую эту команду для генерации файлов C ++:
cxx-tree --std c++11 --generate-polymorphic --output-dir C:/generated Configuration.xsd
Вы, скорее всего, скучаете по —полиморфный тип опция командной строки.
Вот цитата из CodeSynthesis XSD / Tree Manual:
«Однако, если ваш словарь XML не использует группы подстановки или если группы подстановки определены в отдельной схеме, вам нужно будет использовать опцию —polymorphic-type, чтобы указать, какие типы являются полиморфными».
Читать подробнее о —полиморфный тип опция командной строки здесь: