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

XSD-允许元素类型为整数或空,xsd,element,Xsd,Element,我需要能够将简单元素类型设置为整数,但也允许它为空。如果其为空且空白字段不是整数,则此示例将发送错误。我怎样才能避开这件事 <xsd:element name="weight" type="xsd:integer"/> 您需要将“nillable”属性设置为true: <xsd:element name="weight" type="xsd:integer" nillable="true"/> 请参阅。 尝试以上方法,应该有效;很可能您忘记添加xsi:nil属

我需要能够将简单元素类型设置为整数,但也允许它为空。如果其为空且空白字段不是整数,则此示例将发送错误。我怎样才能避开这件事

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

您需要将“nillable”属性设置为true:

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

请参阅。



尝试以上方法,应该有效;很可能您忘记添加xsi:nil属性。此外,请确保权重元素没有子元素的字符(空格仍然是不可接受的)。如果必须传递某些字符而不是整数,则必须定义一个并集类型以同时允许这两个字符。

您需要做的是对同一元素分配限制,然后对它们进行并集,如以下示例:

<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验证允许任何整数值,如果该整数值为空,则允许该元素

我通过搜索如何使用xsd模式将属性设置为可为空的整数,并根据生成的JAXB类找到了这个答案。我在这里找不到答案,所以在找到答案后,我决定与大家分享。以下xsd部分将生成不可为null的int(int)类型:

如果我们放弃所需的使用,我们将获得:

@XmlAttribute(name = "length")
protected Integer length;

希望这对别人有帮助。即使这个答案可能与实际问题无关,但我发现,对于那些将通过与我相同的搜索到达这里的人来说,在这里很有用

我们可以通过制作一个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" />


i尝试过,但出现了以下错误:元素'minimumQuantity':''不是原子类型'xs:integer'@leanne的有效值-考虑到您发布的XSD片段,该错误没有意义。>XML模式如上所述。无论是否包含Nillable,错误消息都是相同的,它不起作用。XML元素“weight”是空的,但是如果我添加一个整数,那么显然这是可行的,但是我需要允许XML节点有一个值或为空。谢谢您的帮助。@leanne-您发布的架构包含虚假文本,包括分号和右括号。看过这些之后,我没有仔细看内容。再说一遍,pangea,您还没有生成XML;根据错误消息,我怀疑它失败的原因不是空元素。如果您需要进一步的帮助,请在您的帖子中发布一个完整的、自包含的示例程序。您的答案包含一个属性,这个问题是关于一个元素的。只是说说而已。在这种情况下,如果属性不是“必需的”,那么如果它是一个属性,解析器的默认值是什么:空字符串还是0?有趣的阅读:您是否尝试从原始XML中跳过元素并在XSD中标记minOccurance=0?请参阅
@XmlAttribute(name = "length")
protected Integer length;
<xs:simpleType name="NullOrInteger">
    <xs:restriction base="xs:string">
         <xs:pattern value="\d*|\s{0}" />
    </xs:restriction>
</xs:simpleType>
<xs:element name="null_or_int" type="NullOrInteger" />