我需要能够将一个简单的元素类型设置为整数但允许它也为空。如果此示例为空且空白字段不是整数,则会发送错误。我怎么能绕过这个?
<xsd:element name="weight" type="xsd:integer"/>
答案 0 :(得分:22)
您需要做的是为同一元素分配限制并在它们上建立联合,如下例所示:
<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验证允许任何整数值,并允许该元素为空。
答案 1 :(得分:7)
我们可以通过制作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" />
答案 2 :(得分:3)
您需要将“nillable”属性设置为true:
<xsd:element name="weight" type="xsd:integer" nillable="true"/>
答案 3 :(得分:1)
<?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元素没有作为子元素的字符(仍然不能接受空格)。如果你必须传递一些字符而不是整数,那么你必须定义一个允许两者的联合类型。
答案 4 :(得分:1)
我通过搜索如何使用xsd模式获取属性为可空的Integer并基于生成的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;
希望这有助于某人。即使这个答案可能与实际问题没有关系,我发现通过我做同样的搜索来到这里的人也很有用!