从xsd:extension获取C ++对象

时间:2015-06-05 09:21:20

标签: c++ xml xsd xml-parsing codesynthesis

我正在使用codesynthesis中的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的构造函数。但是,对于XML文件中的每个BUTTON_ELEMENT,都会调用elementBaseType构造函数。

我错过了什么吗? 我使用此命令生成c ++文件:

cxx-tree --std c++11 --generate-polymorphic --output-dir C:/generated Configuration.xsd

1 个答案:

答案 0 :(得分:0)

您很可能错过了 - polymorphic-type 命令行选项。

以下是CodeSynthesis XSD/Tree Manual

的引用

“但是,如果您的XML词汇表没有使用替换组,或者如果替换组是在单独的架构中定义的,那么您将需要使用--polymorphic-type选项来指定哪些类型是多态的。”

在此处阅读有关 - polymorphic-type 命令行选项的更多详细信息:

CodeSynthesis XSD/Tree command line options