带有精度属性的空十进制元素的XML验证

时间:2016-03-07 05:56:10

标签: xml xsd xsd-validation

我在针对包含以下定义的XSD验证空元素时遇到问题。如果total_amt是空的,我们需要XML文档中的空元素,比如

<div class="modal" id="menuiconmodal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title">Menu</h4>
          </div>
          <div class="modal-body">                
       // some input tags    
          </div>
          <div class="modal-footer">

            <a href="javascript:;" id="sucess" class="btn btn-primary" data-dismiss="modal">Save</a>
          </div>
        </div>
        <!-- /.modal-content -->
      </div>
      <!-- /.modal-dialog -->
    </div>  
    <!-- /.modal -->

    // Alert Showing for a while 

    <div class="alert alert-success alert-dismissible" id="successalert">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
            <h4><i class="icon fa fa-check"></i> Hey!</h4> Menu Item Added Sucessfully !!!!
    </div>

所以我在XSD中创建了一个自定义数据类型,如下所示:

<total_amt/>

元素的XSD定义如下所示。

<xs:simpleType name="decimal-or-empty">
  <xs:union memberTypes="xs:decimal empty-string" />
</xs:simpleType>

<xs:simpleType name="empty-string">
  <xs:restriction base="xs:string">
    <xs:enumeration value="" />
  </xs:restriction>
</xs:simpleType>

如果我删除了上面XSD中的precision属性,那么它会验证自定义数据类型,并且它可以很好地处理空值

<xs:element name = "total_amt" 
            nillable="false" 
            minOccurs="0" 
            type="decimal-or-empty">
     <xs:complexType>
       <xs:SimpleContent>
         <xs:extension base="xs:decimal">
            <xs:attribute name="precision" 
                          type="xs:integer"/>
        </xs:extension>
      </xs:SimpleContent>
   </xs:complexType>
</xs:element>

但是当我定义<xs:element name = "total_amt" nillable="false" minOccurs="0" type="decimal-or-empty"> </xs:element> 属性时,结果始终是XML实例无效。

那么,任何人都可以帮我写XSD,我可以放置precision属性,并在total_amt的值为空时仍然验证XML吗?

1 个答案:

答案 0 :(得分:0)

您的复杂类型会向xs:decimal:

添加precision属性
<xs:extension base="xs:decimal">
  <xs:attribute name="precision" 
                type="xs:integer"/>
</xs:extension>

为什么不将其添加到decimal-or-empty呢?

<xs:extension base="decimal-or-empty">
  <xs:attribute name="precision" 
                type="xs:integer"/>
</xs:extension>

也就是说,我认为不会出现导致问题的属性声明:不再使用你的联合类型。

您可以考虑使用xsi:nil来代替,但要求您的空元素为

<total_amt xsi:nil="true"/>

而不仅仅是

<total_amt/>