需要使用XML架构的多个小数位小数

时间:2012-03-30 20:05:05

标签: xml xsd

我想将数字的小数位数限制为2。

例如 - 1.00有效,但1,1和1.000都无效。

这是一个类似的问题:Specify amount of decimal places of an xs:decimal in an XML schema
这就是答案:

<xs:simpleType name="twoPlacesDecimal" id="twoPlacesDecimal">
    <xs:restriction base="xs:decimal">
        <xs:fractionDigits fixed="true" value="2" />
    </xs:restriction>
</xs:simpleType>

不幸的是,这只会将小数位数限制为2,并允许数字为零或一位小数。

3 个答案:

答案 0 :(得分:3)

我不认为你可以单独使用totalfractionDigits限制来做到这一点,但是可能采用正则表达式模式限制,例如:

<xs:restriction base="decimal">
  <xs:pattern value="[+-]?\d+\.\d{2}"/>
</xs:restriction>

答案 1 :(得分:3)

你可以使用正则表达式将小数位数强制为两个,但这是明智的吗?对于那些生成符合此模式的文档的人来说,你的生活更加艰难。例如,他们将无法使用XSLT或XQuery生成的默认序列化,而是必须编写自己的序列化。是不是更好的改变规范在它接受的东西中更自由一点?

答案 2 :(得分:2)

当我过去做过这个时,我使用了正则表达式匹配器。你可以使用的正则表达式是这样的:

<xsd:simpleType name="exactlyTwoAfterDecimal">
    <xsd:restriction base="xsd:token">
        <xsd:pattern value="^-?\d+\.\d\d$"/>
    </xsd:restriction>
</xsd:simpleType>