父元素是必需的,但不是xml中的子元素

时间:2016-07-20 05:57:37

标签: xml xml-parsing xsd-validation xsd.exe

我有一个名为ContactNumber的父元素是强制性的。它有4个子元素(移动,工作,传真,家庭),这不是强制性的。但至少需要从这4个孩子中的任何一个获得父母的一个值。我该怎么做?。

   <xs:element name="contactDetails">
    <xs:complexType> 
   <xs:element name="jobTitle" /> 
  <xs:sequence><xs:element name="contactNumber" type="contactNumberInfo"  minOccurs="1" maxOccurs="3" />        
    </xs:sequence>
 </xs:complexType>
  </xs:element>
 <xs:complexType name="contactNumberInfo">
    <xs:sequence>
        <xs:element name="mobile">
            <xs:simpleType>
                <xs:restriction base="xs:positiveInteger">
                    <xs:pattern value="[0-9]{10}" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>           

        <xs:element name="home" type="xs:positiveInteger" />
        <xs:element name="work" type="xs:positiveInteger" />
        <xs:element name="fax" type="xs:positiveInteger" />
    </xs:sequence>
</xs:complexType>

1 个答案:

答案 0 :(得分:1)

如果存在固定的元素序列,则其类似于XML schema construct for "any one or more of these elements but must be at least one"

尝试:

<xs:element name="ContactNumber">
        <xs:complexType>
            <xs:choice>
                <xs:sequence>
                    <xs:element name="home" type="xs:positiveInteger" minOccurs="1" maxOccurs="1" />
                    <xs:element name="work" type="xs:positiveInteger"  minOccurs="0" maxOccurs="1" />
                    <xs:element name="fax" type="xs:positiveInteger"  minOccurs="0" maxOccurs="1" />
                    <xs:element name="mobile" type="xs:positiveInteger"  minOccurs="0" maxOccurs="1" />
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="work" type="xs:positiveInteger"  minOccurs="1" maxOccurs="1" />
                    <xs:element name="fax" type="xs:positiveInteger"  minOccurs="0" maxOccurs="1" />
                    <xs:element name="mobile" type="xs:positiveInteger"  minOccurs="0" maxOccurs="1" />
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="fax" type="xs:positiveInteger"  minOccurs="1" maxOccurs="1" />
                    <xs:element name="mobile" type="xs:positiveInteger"  minOccurs="0" maxOccurs="1" />
                </xs:sequence>
                <xs:sequence>
                    <xs:element name="mobile" type="xs:positiveInteger"  minOccurs="1" maxOccurs="1" />
                </xs:sequence>
            </xs:choice>
        </xs:complexType>
    </xs:element>