Xml XSD:根据属性的值更改inside元素的minOccurs

Xml XSD:根据属性的值更改inside元素的minOccurs,xml,xsd,Xml,Xsd,我在xsd中有这个元素 <xs:element name="OuterElement"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="InnerElement"> <xs:complexTyp

我在xsd中有这个元素

        <xs:element name="OuterElement">
            <xs:complexType>
                <xs:choice maxOccurs="unbounded">
                    <xs:element name="InnerElement">
                        <xs:complexType>
                            <xs:attribute name="name" type="xs:string" />
                            <xs:attribute name="value" type="xs:string" />
                        </xs:complexType>
                    </xs:element>
                </xs:choice>

                <xs:attribute name="enabled" type="xs:boolean" use="required" />
            </xs:complexType>
        </xs:element>

不,不是。xsd定义了标记的结构,属性的值就是标记的内容


你可以做一个选择元素,一个成员表示禁用,一个成员表示启用。

一个简单的方法是:你有两种父元素。启用的父级需要至少有一个内部元素子级,而未启用的父级不需要至少有一个内部元素子级。如果你给他们起不同的名字,问题就很简单了。只有当你决定对两件不同的事情使用相同的名字比简单的验证方法更重要时,问题才会变得很难解决。

是的,我认为你的建议对我来说是正确的方法。但是否有两个元素具有相同的名称?也许ref属性可以解决这个问题?老实说,不一定,但是如果不是,请使用一个具有公共名称的父元素,然后选择一个将传递两个子元素中的一个。它必须用于相同的名称。这就是属性存在的原因。而且,我不能改变它。我正在为一个现有的程序做一个模式。那么,如果你服务于真善,你的任务就是找到设计这种格式的程序员和下令不能改变这种格式的经理,并在他们的心中下赌注。
if enabled==true {
   minOccursOfInnerElement=1
}
else {
   minOccursOfInnerElement=0
}