Xsd 如何在XML模式中指定两个字段中的任何一个必须存在?
我想指定Xsd 如何在XML模式中指定两个字段中的任何一个必须存在?,xsd,Xsd,我想指定fieldname或freetext必须始终存在于应用于此XSD的XML文件中。有办法吗 <xs:complexType name="tSome"> <xs:sequence> <!-- either one of the two below has to be present. --> <xs:element name="fieldname" type="xs:string" /> <xs:element name="f
fieldname
或freetext
必须始终存在于应用于此XSD的XML文件中。有办法吗
<xs:complexType name="tSome">
<xs:sequence>
<!-- either one of the two below has to be present. -->
<xs:element name="fieldname" type="xs:string" />
<xs:element name="freetext" type="xs:string" />
<!-- this one below must always be present -->
<xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>
XML模式中有一个,允许您获取其中一个包含的元素,但不能获取两个或更多。如果您想要3个中的任意2个,我建议您这样做:
<xs:choice>
<xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>
<xs:choice>
<xs:element name="fieldname" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="freetext" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="dbtablename" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:choice>
那么,您想要
fieldname
或freetext
而不是两者?或者两者兼而有之?然后选择dbtablename
以下是1或2个元素:
<xs:choice minOccurs="1" maxOccurs="2">
<xs:element name="fieldname" type="xs:string"/>
<xs:element name="freetext" type="xs:string"/>
<xs:element name="dbtablename" type="xs:string"/>
</xs:choice>
这是你想要的吗?还是希望将
dbtablename
分开?非常感谢!必须尝试l8r minoccurs和maxoccurs如何与choice一起工作。尽管我不需要你的例子,但如果答案有效,我会接受。干杯抱歉:周末发生了:fieldname或freetext,而不是两者。dbtablename始终为空。请参阅我编辑的原始问题(为什么有minOccurs标记)。我现在的问题是:既然它有minOccurs标记,那么它现在真的是“fieldname还是freetext,而不是两者都有”吗。这又是我的错误。问题但您不认为应该删除它们吗?@matti可以删除它们,因为minOccures=“0”不起任何作用。@matti如果您不希望元素被指定两次或多次,您可以添加maxOccurs=“1”。@draco:'相反,您可以添加maxOccurs=“1”,如果您不希望元素被指定两次或更多次,您是什么意思?maxOccurs=1是默认值,这意味着在xml文件中,标记/元素最多可以出现一次。在选择的情况下,默认值为minOccurs=“0”和maxOccurs=“0”。抱歉:周末发生:fieldname或freetext。dbtablename始终为空。选择的问题是xsd.exe会为它生成奇怪的代码。这里minOccurs=“1”maxOccurs=“2”是什么意思?选择上的min/max表示需要1个或2个元素。这不是你想要的,德拉科的答案更接近你想要的。大多数xsd编译器生成一些奇怪的代码供选择。我使用Jax-B2,我可以接受。无论如何,谢谢!Jax-B2是用于Java的,我需要C#类生成器。必须尝试WSCF(用于WSDL->Classes),因为它也有.xsd生成选项。@minOccurs/maxOccurs属性是这样工作的吗?我的印象是,它们可能适用于所选元素,而不是选择集中允许的元素数量。(根据W3中的定义:XMLSchema选择元素只允许声明中包含的一个元素出现在包含元素中。
([))我真的很抱歉,但是前面的minOccurs标记存在,因为我的选择实现是fieldname和freetext只是可选的。
<xs:choice minOccurs="1" maxOccurs="2">
<xs:element name="fieldname" type="xs:string"/>
<xs:element name="freetext" type="xs:string"/>
<xs:element name="dbtablename" type="xs:string"/>
</xs:choice>