我在针对包含以下定义的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">×</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">×</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吗?
答案 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/>