我对XSD有疑问。
假设我有500.00美元的货币。
如何设置值应在$ 0.00 - $ 1000.00
范围内的限制我无法直接使用xsd:float,因为前面有美元符号。
我该怎么办?任何帮助表示赞赏。
答案 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>