XSD 需要一个属性但也允许 nil

XSD that requires an attribute but also allows nil

我有一个 XML 架构,其中某些标签必须具有 id 属性。我可以使用 use="required"

使它正常工作
<xs:element name="SiteDiscoveryReleaseReportReceived">
  <xs:complexType>
    <xs:all>
      <xs:element name="ReceivedDate" type="xs:date" nillable="true" />
      <xs:element name="StaffLead" type="xs:int" nillable="true" />
      <xs:element name="Status" nillable="true">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="id" type="xs:int" use="required" />
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:element>

我也想让标签可以为空,但是上面的 XSD 不允许我做 <Status xs:nil="true"/> 因为缺少 id 属性。如果标签不为零,我怎样才能使id属性成为必需的?还是 nil 标签上没有 id 属性会导致 xpath 查询出现逻辑问题?

如果重要,这是针对 SQL 服务器中的 XML 列。

我想你有两个选择:

  1. 更好的方法:将 nillable 属性替换为 minOccurs=0。这样 serializer leaves 如果 Status 元素的值为 null,则它会完全消失。

  2. 制作id属性nillableas well。属性仍然强制存在。

旁注:您可能在反序列化 ReceivedDateStaffLead 元素时遇到问题,因为“XmlSerializer 在尝试反序列化非可空值类型的实例时抛出异常如果 nil 属性设置为 true 1" 并且 intDateTime 类型是不可空的。