拉克什
这可以通过对字段设置限制来实现,这样它们就不会验证它们是否存在但为空。如果您使用验证,这些不会自动删除字段,但是您将强制客户端以您想要的方式发送消息。 XSD 无法为您删除该字段,因为它只是一个定义,而不是解析器。
例如,如果您只想要包含 1 个或多个条目的合并列表,如果不想要合并列表,则可以将其放入您的架构中,如下所示。
<xs:element name="Mergerlist" type="MergerListType" minOccurs="0"/>
<xs:complexType name="MergerListType">
<xs:sequence>
<xs:element type="xs:string" name="merger"/>
</xs:sequence>
</xs:complexType>
现在merge 元素的默认minOccurs 为1。Zo 没有合并的mergelist 是无效的。但是没有合并列表是有效的,因为合并列表的 minOccurs 为 0。
当涉及到元素时,您可以使用如下限制:
<xs:element name="notNullField" minOccurs="0" type="minimalString"/>
<xs:simpleType name="minimalString">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
重要的是要记住在 xml 中指示空值的正确方法如下:
<Element xsi:nil="true"/>
在您的 xsd 中,您可以像这样定义这个字段:
<xs:element name ="Element" nillable="true"/>
这样,客户端可以正确地指示空值并区分空字符串或空字符串。
这将允许您创建一个必须具有最小长度的字段,或者像这样为 null:
<xsd:element name="notNullField" nillable="true" type="tns:minimalString"/>
<xsd:simpleType name="minimalString">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1" />
</xsd:restriction>
</xsd:simpleType>
但这仍然不会删除字段,并且不会自动发生。然而,这可以使用转换来完成。这里有很多关于如何在 stackoverflow 上使用 xslt 删除空节点的示例。
所以基本上你的选择是:
- 强制您的客户端使用 xsd 发送您想要的 XML 消息。
(首选)
- 使用 xsl 转换去除空元素
- 编写处理空节点的代码。