需要属性但也允许nil的XSD

时间:2016-03-10 17:22:59

标签: xml xsd

我有一个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>

我还希望将代码设为nillable,但上面的XSD不允许我执行<Status xs:nil="true"/>,因为缺少id属性。如果标记不是nil,如何将id属性设为?或者nil标签上没有id属性会导致xpath查询出现逻辑问题吗?

如果重要,那就是SQL Server中的XML列。

1 个答案:

答案 0 :(得分:0)

我认为你有两个选择:

  1. 更好的一个:用nillable替换minOccurs=0属性。这样serializer leaves Status元素完全取出,如果它的值为null。

  2. 制作id属性nillable as well。尽管如此,属性仍然存在。

  3. 附注:您可能在反序列化ReceivedDateStaffLead元素时遇到问题,因为&#34; XmlSerializer在尝试反序列化非可空值类型的实例时抛出异常nil属性设置为true 1 &#34; intDateTime类型不可为空。