如何通过XSD确保至少存在一个子元素?

时间:2016-11-29 09:37:09

标签: xml xsd xsd-1.0

location元素包含在locality元素中时,我如何确保至少指定了wkt个子元素(location<xs:element name="location" nillable="true" minOccurs="0"> <xs:complexType> <xs:group ref="cs:locationGroup"></xs:group> </xs:complexType> </xs:element> )中的一个元素XML?

locationGroup

<xs:group name="locationGroup"> <xs:all> <xs:element name="locality" minOccurs="0"/> <xs:element name="wkt" minOccurs="0"/> </xs:all> </xs:group> 的定义:

ContactsContract.CommonDataKinds.Phone.NUMBER

我的XSD版本是1.0。

1 个答案:

答案 0 :(得分:1)

对于这么少的可能子元素,只需定义允许组合的xs:choice

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="location">
    <xs:complexType>
      <xs:group ref="locationGroup"></xs:group>
    </xs:complexType>
  </xs:element>

  <xs:group name="locationGroup">
    <xs:choice>
      <xs:sequence>
        <xs:element name="locality"/>
        <xs:element name="wkt" minOccurs="0"/>
      </xs:sequence>
      <xs:sequence>
        <xs:element name="wkt"/>
        <xs:element name="locality" minOccurs="0"/>
      </xs:sequence>
    </xs:choice>
  </xs:group>
</xs:schema>

请注意这种方法

  • 要求localitywkt中的一个或两个出现
  • 允许任何订单存在时
  • 适用于XSD 1.0(和1.1)

按要求。