2012-03-30 75 views
4

我想要的一些分數小數位數限制恰好2.需要大量的小數位小數有一個XML架構

例如 - 1.00是有效的,但1,1.0和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

你的意思是-1.00是否有效? – Dave 2012-03-30 20:12:32

+0

應該補充說 - 只應接受非負數,但這是對正則表達式的微小修改。 – Matt 2012-03-30 20:15:38

回答

2

當我在過去完成這項工作時,我使用了一個正則表達式匹配器。你可以使用正則表達式是這樣的:

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

我不認爲你可以做到這一點單獨totalfractionDigits限制,但有可能用正則表達式模式限制,是這樣的:

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

如果你想使得十進制是可選的並且允許像1和1.0這樣的值,你需要使得十進制是可選的並且允許這樣一個範圍: '' – fourgablesguy 2015-01-15 21:33:25

+0

@fourgablesguy你的正則表達式適用於像10,1.0和1.00這樣的值,但它不適用於0-9。任何關於如何使它適用於這些值的輸入? – sanpaco 2015-07-15 23:58:35

+1

Nvm我想通了。正確的正則表達式應該是'\ d + \。?\ d {0,2}'。 – sanpaco 2015-07-16 00:27:27

3

你可以使用正則表達式強制小數位數爲2,但這是明智的嗎?任何生成符合此架構的文檔的人都會讓生活更加艱難。例如,他們將無法使用由XSLT或XQuery生成的默認序列化,而是必須自己編寫它們。改變規範在接受它的時候會更自由一點是不是更好?

相關問題