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 列。
我想你有两个选择:
更好的方法:将 nillable
属性替换为 minOccurs=0
。这样 serializer leaves 如果 Status
元素的值为 null,则它会完全消失。
制作id
属性nillable
as well。属性仍然强制存在。
旁注:您可能在反序列化 ReceivedDate
和 StaffLead
元素时遇到问题,因为“XmlSerializer 在尝试反序列化非可空值类型的实例时抛出异常如果 nil 属性设置为 true 1" 并且 int
和 DateTime
类型是不可空的。
我有一个 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 列。
我想你有两个选择:
更好的方法:将
nillable
属性替换为minOccurs=0
。这样 serializer leaves 如果Status
元素的值为 null,则它会完全消失。制作
id
属性nillable
as well。属性仍然强制存在。
旁注:您可能在反序列化 ReceivedDate
和 StaffLead
元素时遇到问题,因为“XmlSerializer 在尝试反序列化非可空值类型的实例时抛出异常如果 nil 属性设置为 true 1" 并且 int
和 DateTime
类型是不可空的。