我有一个 XML,可以是这样的:
<profile>
<docname>Bla bla bla</docname>
<author>Bubi</author>
<doctype>INVOICE</doctype>
</profile>
或像这样:
<profile>
<author>Bubi</author>
<docname>Bla bla bla</docname>
<type1>3</type1>
<type2>1</type2>
<type3>0</type3>
</profile>
元素可以以任何顺序出现。如您所见,它需要具有<doctype>
or<type1>
和标签。<type2>
<type3>
我需要一个 XSD。我试过了
<xs:element name="profile">
<xs:complexType>
<xs:all>
<xs:element type="xs:string" name="author"/>
<xs:element type="xs:string" name="docname"/>
<xs:choice>
<xs:element type="xs:string" name="doctype"/>
<xs:sequence> <!--another little problem: I'd like to put a <xs:all> but is not allowed...-->
<xs:element type="xs:byte" name="type1"/>
<xs:element type="xs:byte" name="type2"/>
<xs:element type="xs:byte" name="type3"/>
</xs:sequence>
</xs:choice>
</xs:all>
</xs:complexType>
</xs:element>
但是<xs:choice>
里面是不允许的<xs:all>
(为什么<xs:all>
这么虐待???)。我发现了这个很棒的相关解决方案,但它只有在选择是在单个元素之间而不是在它们的组之间时才有效。
有人知道解决方法吗?非常感谢!