我正在尝试在XSD中定义一个元素类型,我想要一个可选属性,如果存在,可以包含一个浮点数,或者为空(但仍然存在).
即:
<xs:element name="MyElement">
<xs:complexType>
<xs:attribute name="optionalFloatAttribute" type="xs:float" use="optional"/>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
需要"修复"以允许以下所有xml: -
<MyElement/>
or
<MyElement optionalFloatAttribute=""/>
or
<MyElement optionalFloatAttribute="3.14159"/>
Run Code Online (Sandbox Code Playgroud)
我能看到这样做的唯一方法是将类型更改为xs:string,并使用xs:restriction正则表达式.但这对我来说似乎并不理想.有没有更好的办法?
而且我必须能够支持xml的这些变体 - 程序和现有的xml是遗留的,我试图反向创建一个模式,以匹配我在我们必须视为有效的xml时看到的无数变体.
您可以通过组合float和空字符串为其定义自定义类型:
<xs:element name="MyElement">
<xs:complexType>
<xs:attribute name="optionalFloatAttribute" type="emptyFloat" use="optional"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="emptyFloat">
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base='xs:float'>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
或者使用regExp:
<xs:simpleType name="emptyFloat">
<xs:restriction base="xs:string">
<xs:pattern value="-?\d*\.?\d*"/>
</xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)
我认为没有办法处理这个问题并使用xs:float. 从根本上来说,这可以归结为空字符串不是有效数字。您通常期望值为 0,或者该元素完全缺失。对于以下问题的答案有一个很好的解释:
看来使用 xs:string 和正则表达式的选项可能是您最好的计划。
| 归档时间: |
|
| 查看次数: |
5695 次 |
| 最近记录: |