我有一个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列。
答案 0 :(得分:0)
我认为你有两个选择:
更好的一个:用nillable
替换minOccurs=0
属性。这样serializer leaves Status
元素完全取出,如果它的值为null。
制作id
属性nillable
as well。尽管如此,属性仍然存在。
附注:您可能在反序列化ReceivedDate
和StaffLead
元素时遇到问题,因为&#34; XmlSerializer在尝试反序列化非可空值类型的实例时抛出异常nil属性设置为true 1 &#34; int
和DateTime
类型不可为空。