【发布时间】:2016-04-25 18:20:30
【问题描述】:
我需要能够将简单元素类型设置为整数,但也允许它为空。如果此示例为空且空白字段不是整数,则此示例发送错误。我怎样才能绕过这个?
<xsd:element name="weight" type="xsd:integer"/>
【问题讨论】:
-
您是否尝试跳过原始 XML 中的元素并在 XSD 中标记 minOccurance =0?
我需要能够将简单元素类型设置为整数,但也允许它为空。如果此示例为空且空白字段不是整数,则此示例发送错误。我怎样才能绕过这个?
<xsd:element name="weight" type="xsd:integer"/>
【问题讨论】:
你需要做的是对同一个元素分配限制,并在它们上建立一个联合,例如下面的例子:
<xs:element name="job_code">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base='xs:integer' />
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
通过使用此限制,您可以告诉 xml 验证允许任何整数值,如果元素为空,则允许该元素。
【讨论】:
我们可以通过制作一个 SimpleType 来实现这一点
<xs:simpleType name="NullOrInteger">
<xs:restriction base="xs:string">
<xs:pattern value="\d*|\s{0}" />
</xs:restriction>
</xs:simpleType>
添加 NullOrInteger 作为您想要限制整数或空值的类型。
例如:
<xs:element name="null_or_int" type="NullOrInteger" />
【讨论】:
您需要将“nillable”属性设置为true:
<xsd:element name="weight" type="xsd:integer" nillable="true"/>
【讨论】:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<product>
<weight xsi:nil="true"/>
</product>
</products>
尝试上述方法,应该可以;您很可能忘记添加 xsi:nil 属性。此外,请确保 weight 元素没有作为子元素的字符(仍然不能接受空格)。如果你必须传递一些字符而不是整数,那么你必须定义一个联合类型来允许两者。
【讨论】:
我通过搜索如何使属性成为可为空的整数、使用 xsd 模式以及基于哪些 JAXB 类生成来得出这个答案。我在这里没有找到答案,所以在我找到答案后,我决定分享它。以下 xsd 部分将生成不可为空的 int (int) 类型:
<xsd:attribute name="length" type="xsd:int" use="required"/>
在 Java 代码中,这将导致:
@XmlAttribute(name = "length", required = true)
protected int length;
如果我们放弃所需的使用,我们将得到:
@XmlAttribute(name = "length")
protected Integer length;
希望这对某人有所帮助。即使这个答案可能与实际问题无关,我发现对于那些通过与我相同的搜索到达这里的人来说,这里很有用!
【讨论】: