XSD - 允许元素类型为整数OR空

时间:2011-08-18 15:21:05

标签: xsd element

我需要能够将一个简单的元素类型设置为整数但允许它也为空。如果此示例为空且空白字段不是整数,则会发送错误。我怎么能绕过这个?

<xsd:element name="weight" type="xsd:integer"/>

5 个答案:

答案 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"/>

请参阅XML Schema Primer

答案 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;

希望这有助于某人。即使这个答案可能与实际问题没有关系,我发现通过我做同样的搜索来到这里的人也很有用!