如何在XSD中进行货币限制?

时间:2014-04-22 20:49:51

标签: xml xsd

我对XSD有疑问。

假设我有500.00美元的货币。

如何设置值应在$ 0.00 - $ 1000.00

范围内的限制

我无法直接使用xsd:float,因为前面有美元符号。

我该怎么办?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

如果您将内容视为数字(例如:xs:decimal),则可以限制最大值和最小值:

<xs:element name="money">
    <xs:simpleType>
        <xs:restriction base="xs:decimal">
            <xs:pattern value="\d*\.\d{2}"/>
            <xs:maxInclusive value="1000" />
            <xs:minInclusive value="0" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

但是你不能在数字前加$,否则它不是小数。该模式将强制小数点后两位数。 (您也可以使用<xs:fractionDigits value="2"/>来实现此目的,但它会忽略额外的零;例如:它不会限制123.0000)。

如果您需要使用$,则必须将内容视为字符串。您可以使用正则表达式派生一个新的简单类型来验证您的字符串,但您将无法限制最大值和最小值:

<xs:element name="money">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="\$\d{1,4}\.\d{2}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

这将允许介于$ 0.00和$ 9999.99之间的值,但它不是验证数字,而是验证字符串。这意味着它还将验证诸如$ 0001.00之类的值。

如果您决定单独处理数字和字符串,将数字存储在一个属性或简单内容中,将字符串存储在另一个中,那么请查看此问题的答案:XML Schema How to Declare Price and Currency

答案 1 :(得分:0)

首先,如果必须添加$符号,则基本值必须是字符串。这是一个例子,

 <xs:simpleType name="decimalType">
    <xs:restriction base="xs:string">
       <xs:pattern value="\$\d{1,4}\,*\d*" />
    </xs:restriction>
 </xs:simpleType>